From f42a6200ed239f63f1e0a7efc6202f0d24df8672 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Fri, 18 Apr 2025 11:24:46 +0800 Subject: [PATCH] opt: pages Signed-off-by: bggRGjQaUbCoE --- lib/pages/about/index.dart | 128 +++++------------- lib/pages/bangumi/controller.dart | 4 +- lib/pages/blacklist/controller.dart | 2 +- lib/pages/blacklist/view.dart | 3 +- lib/pages/danmaku_block/controller.dart | 2 +- lib/pages/dynamics/controller.dart | 2 +- lib/pages/emote/controller.dart | 2 +- lib/pages/follow/controller.dart | 3 +- lib/pages/history/controller.dart | 2 +- lib/pages/home/controller.dart | 26 ++-- lib/pages/home/view.dart | 3 +- lib/pages/hot/view.dart | 3 +- lib/pages/live_emote/controller.dart | 2 +- .../member_contribute_ctr.dart | 2 +- lib/pages/member/controller.dart | 2 + lib/pages/rank/controller.dart | 28 +--- lib/pages/rank/view.dart | 26 ++-- lib/pages/rank/zone/view.dart | 1 - .../video/detail/introduction/controller.dart | 3 +- .../introduction/widgets/action_item.dart | 3 +- lib/pages/video/detail/reply/controller.dart | 2 +- .../video/detail/reply_reply/controller.dart | 2 +- 22 files changed, 87 insertions(+), 164 deletions(-) diff --git a/lib/pages/about/index.dart b/lib/pages/about/index.dart index 71de44a5..d4731518 100644 --- a/lib/pages/about/index.dart +++ b/lib/pages/about/index.dart @@ -35,6 +35,17 @@ class _AboutPageState extends State { late int _pressCount = 0; + late Color outline; + late TextStyle subTitleStyle; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + outline = Theme.of(context).colorScheme.outline; + subTitleStyle = + TextStyle(fontSize: 13, color: Theme.of(context).colorScheme.outline); + } + @override void initState() { super.initState(); @@ -49,9 +60,6 @@ class _AboutPageState extends State { @override Widget build(BuildContext context) { - final Color outline = Theme.of(context).colorScheme.outline; - TextStyle subTitleStyle = - TextStyle(fontSize: 13, color: Theme.of(context).colorScheme.outline); return Scaffold( appBar: widget.showAppBar == false ? null : AppBar(title: const Text('关于')), @@ -90,27 +98,27 @@ class _AboutPageState extends State { ), ), ListTile( - title: Text('PiliPlus', - textAlign: TextAlign.center, - style: Theme.of(context) - .textTheme - .titleMedium! - .copyWith(height: 2)), - subtitle: Row(children: [ - const Spacer(), - Text( - '使用Flutter开发的B站第三方客户端', - textAlign: TextAlign.center, - style: TextStyle(color: Theme.of(context).colorScheme.outline), - semanticsLabel: '与你一起,发现不一样的世界', - ), - const Icon( - Icons.accessibility_new, - semanticLabel: "无障碍适配", - size: 18, - ), - const Spacer(), - ]), + title: Text( + 'PiliPlus', + textAlign: TextAlign.center, + style: + Theme.of(context).textTheme.titleMedium!.copyWith(height: 2), + ), + subtitle: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '使用Flutter开发的B站第三方客户端', + style: TextStyle(color: outline), + semanticsLabel: '与你一起,发现不一样的世界', + ), + const Icon( + Icons.accessibility_new, + semanticLabel: "无障碍适配", + size: 18, + ), + ], + ), ), Obx( () => ListTile( @@ -137,29 +145,6 @@ Commit Hash: ${BuildConfig.commitHash}''', 'https://github.com/bggRGjQaUbCoE/PiliPlus/commit/${BuildConfig.commitHash}'), onLongPress: () => Utils.copyText(BuildConfig.commitHash), ), - // Obx( - // () => ListTile( - // onTap: () => _aboutController.onUpdate(), - // title: const Text('最新版本'), - // leading: const Icon(Icons.flag_outlined), - // trailing: Text( - // _aboutController.isLoading.value - // ? '正在获取' - // : _aboutController.isUpdate.value - // ? '有新版本 ❤️${_aboutController.remoteVersion.value}' - // : '当前已是最新版', - // style: subTitleStyle, - // ), - // ), - // ), - // ListTile( - // onTap: () {}, - // title: const Text('更新日志'), - // trailing: const Icon( - // Icons.arrow_forward, - // size: 16, - // ), - // ), Divider( thickness: 1, height: 30, @@ -303,10 +288,7 @@ Commit Hash: ${BuildConfig.commitHash}''', onPressed: Get.back, child: Text( '取消', - style: TextStyle( - color: - Theme.of(context).colorScheme.outline, - ), + style: TextStyle(color: outline), ), ), TextButton( @@ -391,11 +373,7 @@ Commit Hash: ${BuildConfig.commitHash}''', onPressed: Get.back, child: Text( '取消', - style: TextStyle( - color: Theme.of(context) - .colorScheme - .outline, - ), + style: TextStyle(color: outline), ), ), TextButton( @@ -425,8 +403,8 @@ Commit Hash: ${BuildConfig.commitHash}''', ListTile( title: const Text('重置所有设置'), leading: const Icon(Icons.settings_backup_restore_outlined), - onTap: () async { - await showDialog( + onTap: () { + showDialog( context: context, builder: (context) { return AlertDialog( @@ -490,47 +468,13 @@ class AboutController extends GetxController { @override void onInit() { super.onInit(); - // init(); - // 获取当前版本 getCurrentApp(); - // 获取最新的版本 - // getRemoteApp(); } - // 获取设备信息 - // Future init() async { - // DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); - // if (Platform.isAndroid) { - // AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; - // debugPrint(androidInfo.supportedAbis); - // } else if (Platform.isIOS) { - // IosDeviceInfo iosInfo = await deviceInfo.iosInfo; - // debugPrint(iosInfo); - // } - // } - // 获取当前版本 Future getCurrentApp() async { var currentInfo = await PackageInfo.fromPlatform(); String buildNumber = currentInfo.buildNumber; currentVersion.value = "${currentInfo.version}+$buildNumber"; } - - // // 获取远程版本 - // Future getRemoteApp() async { - // var result = await Request().get(Api.latestApp, extra: {'ua': 'pc'}); - // if (result.data.isEmpty) { - // SmartDialog.showToast('检查更新失败,github接口未返回数据,请检查网络'); - // return false; - // } else if (result.data[0] == null) { - // SmartDialog.showToast('检查更新失败,github接口返回如下内容:\n${result.data}'); - // return false; - // } - // data = LatestDataModel.fromJson(result.data[0]); - // remoteAppInfo = data; - // remoteVersion.value = data!.tagName!; - // isUpdate.value = - // Utils.needUpdate(currentVersion.value, remoteVersion.value); - // isLoading.value = false; - // } } diff --git a/lib/pages/bangumi/controller.dart b/lib/pages/bangumi/controller.dart index 446ed4e7..27620ac0 100644 --- a/lib/pages/bangumi/controller.dart +++ b/lib/pages/bangumi/controller.dart @@ -14,8 +14,8 @@ class BangumiController extends CommonListController< BangumiController({required this.tabType}); final TabType tabType; - RxBool isLogin = false.obs; int? mid; + late final RxBool isLogin; late final showPgcTimeline = tabType == TabType.bangumi && GStorage.showPgcTimeline; @@ -23,7 +23,7 @@ class BangumiController extends CommonListController< void onInit() { super.onInit(); mid = Accounts.main.mid; - isLogin.value = mid != 0; + isLogin = (mid != 0).obs; queryData(); queryBangumiFollow(); diff --git a/lib/pages/blacklist/controller.dart b/lib/pages/blacklist/controller.dart index 13f78834..df67c31b 100644 --- a/lib/pages/blacklist/controller.dart +++ b/lib/pages/blacklist/controller.dart @@ -11,7 +11,7 @@ import 'package:get/get.dart'; class BlackListController extends CommonListController { int pageSize = 50; - RxInt total = 0.obs; + RxInt total = (-1).obs; @override void onInit() { diff --git a/lib/pages/blacklist/view.dart b/lib/pages/blacklist/view.dart index a7f24087..455af431 100644 --- a/lib/pages/blacklist/view.dart +++ b/lib/pages/blacklist/view.dart @@ -34,7 +34,8 @@ class _BlackListPageState extends State { return Scaffold( appBar: AppBar( title: Obx( - () => Text('黑名单管理: ${_blackListController.total.value}'), + () => Text( + '黑名单管理${_blackListController.total.value == -1 ? '' : ': ${_blackListController.total.value}'}'), ), ), body: refreshIndicator( diff --git a/lib/pages/danmaku_block/controller.dart b/lib/pages/danmaku_block/controller.dart index f5f2b2f1..8d9fc17a 100644 --- a/lib/pages/danmaku_block/controller.dart +++ b/lib/pages/danmaku_block/controller.dart @@ -5,7 +5,7 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; class DanmakuBlockController extends GetxController - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { final ruleTypes = RxMap>({0: {}, 1: {}, 2: {}}); late TabController tabController; diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 753cda63..12dc339c 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -16,7 +16,7 @@ import '../../models/follow/result.dart'; import '../common/common_controller.dart'; class DynamicsController extends GetxController - with GetTickerProviderStateMixin, ScrollOrRefreshMixin { + with GetSingleTickerProviderStateMixin, ScrollOrRefreshMixin { @override final ScrollController scrollController = ScrollController(); String? offset = ''; diff --git a/lib/pages/emote/controller.dart b/lib/pages/emote/controller.dart index 583e65c5..d8dc6475 100644 --- a/lib/pages/emote/controller.dart +++ b/lib/pages/emote/controller.dart @@ -8,7 +8,7 @@ import '../../http/reply.dart'; class EmotePanelController extends CommonListController?, Packages> - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { TabController? tabController; @override diff --git a/lib/pages/follow/controller.dart b/lib/pages/follow/controller.dart index 0c358a11..ab090aeb 100644 --- a/lib/pages/follow/controller.dart +++ b/lib/pages/follow/controller.dart @@ -9,7 +9,8 @@ import 'package:PiliPlus/utils/storage.dart'; /// 查看自己的关注时,可以查看分类 /// 查看其他人的关注时,只可以看全部 -class FollowController extends GetxController with GetTickerProviderStateMixin { +class FollowController extends GetxController + with GetSingleTickerProviderStateMixin { int pn = 1; int ps = 20; int total = 0; diff --git a/lib/pages/history/controller.dart b/lib/pages/history/controller.dart index 5b7339da..e96fe2c3 100644 --- a/lib/pages/history/controller.dart +++ b/lib/pages/history/controller.dart @@ -10,7 +10,7 @@ import 'package:PiliPlus/models/user/history.dart'; import 'package:PiliPlus/utils/storage.dart'; class HistoryController extends MultiSelectController - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { HistoryController(this.type); late final baseCtr = Get.put(HistoryBaseController()); diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index 8ff05d10..2ec1d0b5 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -11,18 +11,16 @@ import '../common/common_controller.dart'; import '../mine/view.dart'; class HomeController extends GetxController - with GetTickerProviderStateMixin, ScrollOrRefreshMixin { - late RxList tabs = [].obs; - late TabController tabController; + with GetSingleTickerProviderStateMixin, ScrollOrRefreshMixin { + late List tabs; late List tabsCtrList; - late List tabsPageList; + late TabController tabController; + RxBool isLogin = false.obs; RxString userFace = ''.obs; - dynamic userInfo; + StreamController? searchBarStream; late bool hideSearchBar; - late List defaultTabs; - late List tabbarSort; late bool useSideBar; late bool enableSearchWord; @@ -45,23 +43,26 @@ class HomeController extends GetxController @override void onInit() { super.onInit(); - userInfo = GStorage.userInfo.get('userInfoCache'); + final userInfo = GStorage.userInfo.get('userInfoCache'); isLogin.value = userInfo != null; userFace.value = userInfo != null ? userInfo.face : ''; + hideSearchBar = GStorage.setting.get(SettingBoxKey.hideSearchBar, defaultValue: true); if (hideSearchBar) { searchBarStream = StreamController.broadcast(); } + enableSearchWord = GStorage.setting .get(SettingBoxKey.enableSearchWord, defaultValue: true); if (enableSearchWord) { lateCheckSearchAt = DateTime.now().millisecondsSinceEpoch; querySearchDefault(); } + useSideBar = GStorage.setting.get(SettingBoxKey.useSideBar, defaultValue: false); - // 进行tabs配置 + setTabConfig(); } @@ -71,18 +72,17 @@ class HomeController extends GetxController } void setTabConfig() async { - defaultTabs = [...tabsConfig]; - tabbarSort = GStorage.tabbarSort; + final defaultTabs = [...tabsConfig]; + final tabbarSort = GStorage.tabbarSort; defaultTabs.retainWhere( (item) => tabbarSort.contains((item['type'] as TabType).name)); defaultTabs.sort((a, b) => tabbarSort .indexOf((a['type'] as TabType).name) .compareTo(tabbarSort.indexOf((b['type'] as TabType).name))); - tabs.value = defaultTabs; + tabs = defaultTabs; tabsCtrList = tabs.map((e) => e['ctr']).toList(); - tabsPageList = tabs.map((e) => e['page']).toList(); tabController = TabController( initialIndex: max(0, tabbarSort.indexOf(TabType.rcmd.name)), diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 7a13daa4..0e40fa44 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -67,7 +67,8 @@ class _HomePageState extends State Expanded( child: tabBarView( controller: _homeController.tabController, - children: _homeController.tabsPageList, + children: + _homeController.tabs.map((e) => e['page']).toList(), ), ), ], diff --git a/lib/pages/hot/view.dart b/lib/pages/hot/view.dart index bac6f04e..df1d630f 100644 --- a/lib/pages/hot/view.dart +++ b/lib/pages/hot/view.dart @@ -5,6 +5,7 @@ import 'package:PiliPlus/models/common/tab_type.dart'; import 'package:PiliPlus/models/model_hot_video_item.dart'; import 'package:PiliPlus/pages/common/common_page.dart'; import 'package:PiliPlus/pages/rank/view.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPlus/common/constants.dart'; @@ -41,7 +42,7 @@ class _HotPageState extends CommonPageState child: Column( mainAxisSize: MainAxisSize.min, children: [ - Image.network(width: 35, height: 35, iconUrl), + CachedNetworkImage(width: 35, height: 35, imageUrl: iconUrl), const SizedBox(height: 4), Text( title, diff --git a/lib/pages/live_emote/controller.dart b/lib/pages/live_emote/controller.dart index 6a74b62f..613732ff 100644 --- a/lib/pages/live_emote/controller.dart +++ b/lib/pages/live_emote/controller.dart @@ -7,7 +7,7 @@ import 'package:get/get.dart'; class LiveEmotePanelController extends CommonListController?, LiveEmoteDatum> - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { LiveEmotePanelController(this.roomId); final int roomId; TabController? tabController; diff --git a/lib/pages/member/content/member_contribute/member_contribute_ctr.dart b/lib/pages/member/content/member_contribute/member_contribute_ctr.dart index 68bee3a3..f2983b03 100644 --- a/lib/pages/member/content/member_contribute/member_contribute_ctr.dart +++ b/lib/pages/member/content/member_contribute/member_contribute_ctr.dart @@ -11,7 +11,7 @@ import 'package:get/get.dart'; import '../../../../models/space/item.dart'; class MemberContributeCtr extends CommonDataController - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { MemberContributeCtr({ required this.heroTag, required this.initialIndex, diff --git a/lib/pages/member/controller.dart b/lib/pages/member/controller.dart index 0f38aa26..05d08321 100644 --- a/lib/pages/member/controller.dart +++ b/lib/pages/member/controller.dart @@ -108,6 +108,7 @@ class MemberControllerNew extends CommonDataController }); } tabs = tab2!.map((item) => Tab(text: item.title ?? '')).toList(); + tabController?.dispose(); tabController = TabController( vsync: this, length: tabs.length, @@ -132,6 +133,7 @@ class MemberControllerNew extends CommonDataController Tab2(title: '追番', param: 'bangumi'), ]; tabs = tab2!.map((item) => Tab(text: item.title)).toList(); + tabController?.dispose(); tabController = TabController( vsync: this, length: tabs.length, diff --git a/lib/pages/rank/controller.dart b/lib/pages/rank/controller.dart index 38f4f124..a75edb7e 100644 --- a/lib/pages/rank/controller.dart +++ b/lib/pages/rank/controller.dart @@ -7,41 +7,19 @@ import 'package:get/get.dart'; import 'package:PiliPlus/models/common/rank_type.dart'; class RankController extends GetxController - with GetTickerProviderStateMixin, ScrollOrRefreshMixin { - bool flag = false; - late RxList tabs = [].obs; - RxInt initialIndex = 0.obs; + with GetSingleTickerProviderStateMixin, ScrollOrRefreshMixin { + RxInt tabIndex = 0.obs; late TabController tabController; - late List tabsPageList; - // late final StreamController searchBarStream = - // StreamController.broadcast(); - late bool enableGradientBg; ZoneController get controller => Get.find( tag: tabsConfig[tabController.index]['rid'].toString()); - @override ScrollController get scrollController => controller.scrollController; @override void onInit() { super.onInit(); - // enableGradientBg = - // setting.get(SettingBoxKey.enableGradientBg, defaultValue: true); - // 进行tabs配置 - setTabConfig(); - } - - void setTabConfig() async { - tabs.value = tabsConfig; - initialIndex.value = 0; - tabsPageList = tabs.map((item) => ZonePage(rid: item['rid'])).toList(); - - tabController = TabController( - initialIndex: initialIndex.value, - length: tabs.length, - vsync: this, - ); + tabController = TabController(length: tabsConfig.length, vsync: this); } @override diff --git a/lib/pages/rank/view.dart b/lib/pages/rank/view.dart index b34e9d12..6784fb64 100644 --- a/lib/pages/rank/view.dart +++ b/lib/pages/rank/view.dart @@ -1,3 +1,5 @@ +import 'package:PiliPlus/models/common/rank_type.dart'; +import 'package:PiliPlus/pages/rank/zone/view.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import './controller.dart'; @@ -10,19 +12,12 @@ class RankPage extends StatefulWidget { } class _RankPageState extends State - with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin { + with AutomaticKeepAliveClientMixin { final RankController _rankController = Get.put(RankController()); @override bool get wantKeepAlive => true; - @override - void initState() { - super.initState(); - _rankController.tabController = - TabController(vsync: this, length: _rankController.tabs.length); - } - @override Widget build(BuildContext context) { super.build(context); @@ -36,16 +31,16 @@ class _RankPageState extends State ), child: Column( children: List.generate( - _rankController.tabs.length, + tabsConfig.length, (index) => Obx( () => IntrinsicHeight( child: InkWell( onTap: () { - _rankController.initialIndex.value = index; + _rankController.tabIndex.value = index; _rankController.tabController.animateTo(index); }, child: ColoredBox( - color: index == _rankController.initialIndex.value + color: index == _rankController.tabIndex.value ? Theme.of(context).colorScheme.onInverseSurface : Theme.of(context).colorScheme.surface, child: Row( @@ -54,7 +49,7 @@ class _RankPageState extends State Container( height: double.infinity, width: 3, - color: index == _rankController.initialIndex.value + color: index == _rankController.tabIndex.value ? Theme.of(context).colorScheme.primary : Colors.transparent, ), @@ -65,10 +60,10 @@ class _RankPageState extends State padding: const EdgeInsets.symmetric(vertical: 7), child: Text( - _rankController.tabs[index]['label'], + tabsConfig[index]['label'], style: TextStyle( color: index == - _rankController.initialIndex.value + _rankController.tabIndex.value ? Theme.of(context).colorScheme.primary : Theme.of(context) .colorScheme @@ -94,7 +89,8 @@ class _RankPageState extends State child: TabBarView( physics: const NeverScrollableScrollPhysics(), controller: _rankController.tabController, - children: _rankController.tabsPageList, + children: + tabsConfig.map((item) => ZonePage(rid: item['rid'])).toList(), ), ), ], diff --git a/lib/pages/rank/zone/view.dart b/lib/pages/rank/zone/view.dart index cd53d19d..736a0aed 100644 --- a/lib/pages/rank/zone/view.dart +++ b/lib/pages/rank/zone/view.dart @@ -43,7 +43,6 @@ class _ZonePageState extends CommonPageState controller: controller.scrollController, slivers: [ SliverPadding( - // 单列布局 EdgeInsets.zero padding: EdgeInsets.only( top: StyleString.safeSpace - 5, bottom: MediaQuery.of(context).padding.bottom + 80, diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index bc31764a..120835d0 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -32,8 +32,7 @@ import '../../../../http/search.dart'; import '../../../../models/model_hot_video_item.dart'; import '../related/index.dart'; -class VideoIntroController extends GetxController - with GetTickerProviderStateMixin { +class VideoIntroController extends GetxController { // 视频bvid late String bvid; diff --git a/lib/pages/video/detail/introduction/widgets/action_item.dart b/lib/pages/video/detail/introduction/widgets/action_item.dart index fdb7c8f6..1f7a7395 100644 --- a/lib/pages/video/detail/introduction/widgets/action_item.dart +++ b/lib/pages/video/detail/introduction/widgets/action_item.dart @@ -41,7 +41,8 @@ class ActionItem extends StatefulWidget { State createState() => ActionItemState(); } -class ActionItemState extends State with TickerProviderStateMixin { +class ActionItemState extends State + with SingleTickerProviderStateMixin { AnimationController? controller; Animation? _animation; diff --git a/lib/pages/video/detail/reply/controller.dart b/lib/pages/video/detail/reply/controller.dart index 4ba58aaf..cff56923 100644 --- a/lib/pages/video/detail/reply/controller.dart +++ b/lib/pages/video/detail/reply/controller.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:get/get_state_manager/src/rx_flutter/rx_ticket_provider_mixin.dart'; class VideoReplyController extends ReplyController - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { VideoReplyController({required this.aid}); // 视频aid 请求时使用的oid int aid; diff --git a/lib/pages/video/detail/reply_reply/controller.dart b/lib/pages/video/detail/reply_reply/controller.dart index a4bf26ea..c37e758b 100644 --- a/lib/pages/video/detail/reply_reply/controller.dart +++ b/lib/pages/video/detail/reply_reply/controller.dart @@ -10,7 +10,7 @@ import 'package:PiliPlus/models/common/reply_type.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; class VideoReplyReplyController extends ReplyController - with GetTickerProviderStateMixin { + with GetSingleTickerProviderStateMixin { VideoReplyReplyController({ required this.hasRoot, required this.id,