mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
feat: 合集列表新增反序,跳至顶部/底部功能
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
|
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||||
|
|
||||||
import '../../utils/storage.dart';
|
import '../../utils/storage.dart';
|
||||||
@@ -21,6 +22,7 @@ class ListSheet {
|
|||||||
required this.changeFucCall,
|
required this.changeFucCall,
|
||||||
required this.context,
|
required this.context,
|
||||||
});
|
});
|
||||||
|
bool reverse = false;
|
||||||
|
|
||||||
Widget buildEpisodeListItem(
|
Widget buildEpisodeListItem(
|
||||||
dynamic episode,
|
dynamic episode,
|
||||||
@@ -114,12 +116,41 @@ class ListSheet {
|
|||||||
height: 45,
|
height: 45,
|
||||||
padding: const EdgeInsets.only(left: 14, right: 14),
|
padding: const EdgeInsets.only(left: 14, right: 14),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'合集(${episodes!.length})',
|
'合集(${episodes!.length})',
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
),
|
),
|
||||||
|
IconButton(
|
||||||
|
tooltip: '跳至顶部',
|
||||||
|
icon: const Icon(Icons.vertical_align_top),
|
||||||
|
onPressed: () {
|
||||||
|
itemScrollController.jumpTo(
|
||||||
|
index: !reverse ? 0 : episodes!.length - 1,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
tooltip: '跳至底部',
|
||||||
|
icon: const Icon(Icons.vertical_align_bottom),
|
||||||
|
onPressed: () {
|
||||||
|
itemScrollController.jumpTo(
|
||||||
|
index: !reverse ? episodes!.length - 1 : 0,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
IconButton(
|
||||||
|
tooltip: '反序',
|
||||||
|
icon: Icon(!reverse
|
||||||
|
? MdiIcons.sortAscending
|
||||||
|
: MdiIcons.sortDescending),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
reverse = !reverse;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
tooltip: '关闭',
|
tooltip: '关闭',
|
||||||
icon: const Icon(Icons.close),
|
icon: const Icon(Icons.close),
|
||||||
@@ -135,21 +166,17 @@ class ListSheet {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: Material(
|
child: Material(
|
||||||
child: ScrollablePositionedList.builder(
|
child: ScrollablePositionedList.builder(
|
||||||
itemCount: episodes!.length + 1,
|
padding: EdgeInsets.only(
|
||||||
|
bottom: MediaQuery.of(context).padding.bottom + 20),
|
||||||
|
reverse: reverse,
|
||||||
|
itemCount: episodes!.length,
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
bool isLastItem = index == episodes!.length;
|
return buildEpisodeListItem(
|
||||||
bool isCurrentIndex = currentIndex == index;
|
episodes![index],
|
||||||
return isLastItem
|
index,
|
||||||
? SizedBox(
|
currentIndex == index,
|
||||||
height:
|
bottomSheetController!,
|
||||||
MediaQuery.of(context).padding.bottom + 20,
|
);
|
||||||
)
|
|
||||||
: buildEpisodeListItem(
|
|
||||||
episodes![index],
|
|
||||||
index,
|
|
||||||
isCurrentIndex,
|
|
||||||
bottomSheetController!,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
itemScrollController: itemScrollController,
|
itemScrollController: itemScrollController,
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user