opt: dyn tab

opt: reload

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-15 16:19:33 +08:00
parent 2b567e7cb3
commit 14f8ec37c5
11 changed files with 65 additions and 25 deletions

View File

@@ -45,7 +45,7 @@ class PBadge extends StatelessWidget {
// 前景色 // 前景色
Color color = t.onPrimary; Color color = t.onPrimary;
// 边框色 // 边框色
Color? borderColor; Color borderColor = Colors.transparent;
if (type == 'gray') { if (type == 'gray') {
bgColor = Colors.black45; bgColor = Colors.black45;
color = Colors.white; color = Colors.white;
@@ -77,7 +77,7 @@ class PBadge extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: br, borderRadius: br,
color: bgColor, color: bgColor,
border: borderColor != null ? Border.all(color: borderColor) : null, border: Border.all(color: borderColor),
), ),
child: Text( child: Text(
text!, text!,

View File

@@ -499,4 +499,10 @@ https://api.bilibili.com/x/v2/reply/reply?oid=$oid&pn=1&ps=20&root=${rpid ?? rep
SmartDialog.showToast(res['msg']); SmartDialog.showToast(res['msg']);
} }
} }
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
} }

View File

@@ -171,10 +171,12 @@ class DynamicsController extends GetxController
} }
onSelectUp(mid) async { onSelectUp(mid) async {
if (mid == this.mid.value) { if (this.mid == mid) {
this.mid.refresh(); tabController.index = (mid == -1 ? 0 : 4);
controller.onReload();
return; return;
} }
this.mid.value = mid; this.mid.value = mid;
tabController.index = (mid == -1 ? 0 : 4); tabController.index = (mid == -1 ? 0 : 4);
} }
@@ -194,9 +196,10 @@ class DynamicsController extends GetxController
@override @override
FutureOr<void> toTopOrRefresh() { FutureOr<void> toTopOrRefresh() {
if (scrollController.hasClients && controller.scrollController.hasClients) { final ctr = controller;
if (scrollController.hasClients && ctr.scrollController.hasClients) {
if (scrollController.position.pixels == 0 && if (scrollController.position.pixels == 0 &&
controller.scrollController.position.pixels == 0) { ctr.scrollController.position.pixels == 0) {
return onRefresh(); return onRefresh();
} else { } else {
animateToTop(); animateToTop();

View File

@@ -3,6 +3,7 @@ import 'package:PiliPlus/http/msg.dart';
import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart';
import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/pages/main/controller.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -62,4 +63,10 @@ class DynamicsTabController
SmartDialog.showToast(res['msg']); SmartDialog.showToast(res['msg']);
} }
} }
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
} }

View File

@@ -60,9 +60,11 @@ class _DynamicsTabPageState
super.initState(); super.initState();
if (widget.dynamicsType == 'up') { if (widget.dynamicsType == 'up') {
_listener = dynamicsController.mid.listen((mid) { _listener = dynamicsController.mid.listen((mid) {
controller.mid = mid; if (mid != -1) {
controller.scrollController.jumpTo(0); controller
controller.onReload(); ..mid = mid
..onReload();
}
}); });
} }
dynamicsWaterfallFlow = GStorage.setting dynamicsWaterfallFlow = GStorage.setting

View File

@@ -1,11 +1,9 @@
import 'package:PiliPlus/models/common/dynamics_type.dart'; import 'package:PiliPlus/models/common/dynamics_type.dart';
import 'package:PiliPlus/models/common/up_panel_position.dart'; import 'package:PiliPlus/models/common/up_panel_position.dart';
import 'package:PiliPlus/pages/dynamics/create_dyn_panel.dart'; import 'package:PiliPlus/pages/dynamics/create_dyn_panel.dart';
import 'package:PiliPlus/pages/dynamics/tab/controller.dart';
import 'package:easy_debounce/easy_throttle.dart'; import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:PiliPlus/utils/feed_back.dart';
import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
@@ -161,9 +159,7 @@ class _DynamicsPageState extends State<DynamicsPage>
DynamicsType.values.map((e) => Tab(text: e.labels)).toList(), DynamicsType.values.map((e) => Tab(text: e.labels)).toList(),
onTap: (index) { onTap: (index) {
if (!_dynamicsController.tabController.indexIsChanging) { if (!_dynamicsController.tabController.indexIsChanging) {
feedBack(); _dynamicsController.animateToTop();
Get.find<DynamicsTabController>(tag: tabsConfig[index]['tag'])
.animateToTop();
} }
}, },
), ),

View File

@@ -172,4 +172,10 @@ class FavDetailController
} }
} }
} }
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
} }

View File

@@ -192,4 +192,10 @@ class HistoryController extends MultiSelectController<HistoryData, HisListItem>
tabController?.dispose(); tabController?.dispose();
super.onClose(); super.onClose();
} }
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
} }

View File

@@ -233,4 +233,10 @@ class LaterController extends MultiSelectController<Map, HotVideoItemModel> {
} }
} }
} }
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
} }

View File

@@ -132,6 +132,8 @@ class _SearchResultPageState extends State<SearchResultPage>
), ),
), ),
Expanded( Expanded(
child: Material(
color: Colors.transparent,
child: tabBarView( child: tabBarView(
controller: _tabController, controller: _tabController,
children: SearchType.values children: SearchType.values
@@ -145,6 +147,7 @@ class _SearchResultPageState extends State<SearchResultPage>
.toList(), .toList(),
), ),
), ),
),
], ],
), ),
); );

View File

@@ -23,6 +23,11 @@ extension ScrollControllerExt on ScrollController {
duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); duration: const Duration(milliseconds: 500), curve: Curves.easeInOut);
} }
} }
void jumpToTop() {
if (!hasClients) return;
jumpTo(0);
}
} }
extension IterableExt<T> on Iterable<T>? { extension IterableExt<T> on Iterable<T>? {