diff --git a/lib/common/widgets/badge.dart b/lib/common/widgets/badge.dart index 064114e9..c23863e2 100644 --- a/lib/common/widgets/badge.dart +++ b/lib/common/widgets/badge.dart @@ -45,7 +45,7 @@ class PBadge extends StatelessWidget { // 前景色 Color color = t.onPrimary; // 边框色 - Color? borderColor; + Color borderColor = Colors.transparent; if (type == 'gray') { bgColor = Colors.black45; color = Colors.white; @@ -77,7 +77,7 @@ class PBadge extends StatelessWidget { decoration: BoxDecoration( borderRadius: br, color: bgColor, - border: borderColor != null ? Border.all(color: borderColor) : null, + border: Border.all(color: borderColor), ), child: Text( text!, diff --git a/lib/pages/common/reply_controller.dart b/lib/pages/common/reply_controller.dart index b821b010..1f5f5181 100644 --- a/lib/pages/common/reply_controller.dart +++ b/lib/pages/common/reply_controller.dart @@ -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']); } } + + @override + Future onReload() { + scrollController.jumpToTop(); + return super.onReload(); + } } diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 7f4ffca3..753cda63 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -171,10 +171,12 @@ class DynamicsController extends GetxController } onSelectUp(mid) async { - if (mid == this.mid.value) { - this.mid.refresh(); + if (this.mid == mid) { + tabController.index = (mid == -1 ? 0 : 4); + controller.onReload(); return; } + this.mid.value = mid; tabController.index = (mid == -1 ? 0 : 4); } @@ -194,9 +196,10 @@ class DynamicsController extends GetxController @override FutureOr toTopOrRefresh() { - if (scrollController.hasClients && controller.scrollController.hasClients) { + final ctr = controller; + if (scrollController.hasClients && ctr.scrollController.hasClients) { if (scrollController.position.pixels == 0 && - controller.scrollController.position.pixels == 0) { + ctr.scrollController.position.pixels == 0) { return onRefresh(); } else { animateToTop(); diff --git a/lib/pages/dynamics/tab/controller.dart b/lib/pages/dynamics/tab/controller.dart index 57679c14..b642f609 100644 --- a/lib/pages/dynamics/tab/controller.dart +++ b/lib/pages/dynamics/tab/controller.dart @@ -3,6 +3,7 @@ import 'package:PiliPlus/http/msg.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/pages/common/common_list_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:get/get.dart'; @@ -62,4 +63,10 @@ class DynamicsTabController SmartDialog.showToast(res['msg']); } } + + @override + Future onReload() { + scrollController.jumpToTop(); + return super.onReload(); + } } diff --git a/lib/pages/dynamics/tab/view.dart b/lib/pages/dynamics/tab/view.dart index ac638d55..f3ac74be 100644 --- a/lib/pages/dynamics/tab/view.dart +++ b/lib/pages/dynamics/tab/view.dart @@ -60,9 +60,11 @@ class _DynamicsTabPageState super.initState(); if (widget.dynamicsType == 'up') { _listener = dynamicsController.mid.listen((mid) { - controller.mid = mid; - controller.scrollController.jumpTo(0); - controller.onReload(); + if (mid != -1) { + controller + ..mid = mid + ..onReload(); + } }); } dynamicsWaterfallFlow = GStorage.setting diff --git a/lib/pages/dynamics/view.dart b/lib/pages/dynamics/view.dart index 97d8e3da..6853c596 100644 --- a/lib/pages/dynamics/view.dart +++ b/lib/pages/dynamics/view.dart @@ -1,11 +1,9 @@ import 'package:PiliPlus/models/common/dynamics_type.dart'; import 'package:PiliPlus/models/common/up_panel_position.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:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; @@ -161,9 +159,7 @@ class _DynamicsPageState extends State DynamicsType.values.map((e) => Tab(text: e.labels)).toList(), onTap: (index) { if (!_dynamicsController.tabController.indexIsChanging) { - feedBack(); - Get.find(tag: tabsConfig[index]['tag']) - .animateToTop(); + _dynamicsController.animateToTop(); } }, ), diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index 52d40e07..5f39d31e 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -172,4 +172,10 @@ class FavDetailController } } } + + @override + Future onReload() { + scrollController.jumpToTop(); + return super.onReload(); + } } diff --git a/lib/pages/history/controller.dart b/lib/pages/history/controller.dart index 39cadd71..5b7339da 100644 --- a/lib/pages/history/controller.dart +++ b/lib/pages/history/controller.dart @@ -192,4 +192,10 @@ class HistoryController extends MultiSelectController tabController?.dispose(); super.onClose(); } + + @override + Future onReload() { + scrollController.jumpToTop(); + return super.onReload(); + } } diff --git a/lib/pages/later/controller.dart b/lib/pages/later/controller.dart index a04ff63e..487eda33 100644 --- a/lib/pages/later/controller.dart +++ b/lib/pages/later/controller.dart @@ -233,4 +233,10 @@ class LaterController extends MultiSelectController { } } } + + @override + Future onReload() { + scrollController.jumpToTop(); + return super.onReload(); + } } diff --git a/lib/pages/search_result/view.dart b/lib/pages/search_result/view.dart index ce5091ae..baf526fd 100644 --- a/lib/pages/search_result/view.dart +++ b/lib/pages/search_result/view.dart @@ -132,17 +132,20 @@ class _SearchResultPageState extends State ), ), Expanded( - child: tabBarView( - controller: _tabController, - children: SearchType.values - .map( - (item) => SearchPanel( - keyword: _searchResultController.keyword, - searchType: item, - tag: _tag, - ), - ) - .toList(), + child: Material( + color: Colors.transparent, + child: tabBarView( + controller: _tabController, + children: SearchType.values + .map( + (item) => SearchPanel( + keyword: _searchResultController.keyword, + searchType: item, + tag: _tag, + ), + ) + .toList(), + ), ), ), ], diff --git a/lib/utils/extension.dart b/lib/utils/extension.dart index 03f4fbd8..86d5882e 100644 --- a/lib/utils/extension.dart +++ b/lib/utils/extension.dart @@ -23,6 +23,11 @@ extension ScrollControllerExt on ScrollController { duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); } } + + void jumpToTop() { + if (!hasClients) return; + jumpTo(0); + } } extension IterableExt on Iterable? {