From 4c758bb1a34566be11560ca773afb4c9578ae3f1 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Tue, 10 Jun 2025 11:42:50 +0800 Subject: [PATCH] opt account Signed-off-by: bggRGjQaUbCoE --- lib/main.dart | 2 + lib/pages/article/controller.dart | 2 +- lib/pages/common/reply_controller.dart | 3 +- lib/pages/contact/view.dart | 10 +- lib/pages/danmaku/controller.dart | 6 +- lib/pages/dynamics/controller.dart | 18 +-- lib/pages/dynamics/view.dart | 2 +- lib/pages/dynamics/widgets/up_panel.dart | 16 ++- lib/pages/dynamics_topic/controller.dart | 9 +- lib/pages/dynamics_topic/view.dart | 4 +- lib/pages/episode_panel/view.dart | 8 +- lib/pages/fan/view.dart | 10 +- lib/pages/fav/video/controller.dart | 9 +- lib/pages/fav_detail/controller.dart | 8 +- lib/pages/fav_detail/view.dart | 4 +- lib/pages/follow/controller.dart | 4 +- lib/pages/home/controller.dart | 9 +- lib/pages/home/view.dart | 6 +- lib/pages/later/child_view.dart | 2 +- lib/pages/later/controller.dart | 8 +- lib/pages/later/view.dart | 4 +- lib/pages/live/controller.dart | 14 +- lib/pages/live_area/controller.dart | 13 +- lib/pages/live_area/view.dart | 4 +- .../live_area_detail/child/controller.dart | 6 +- lib/pages/live_area_detail/controller.dart | 8 +- lib/pages/live_room/controller.dart | 8 +- lib/pages/live_room/view.dart | 2 +- lib/pages/live_search/child/controller.dart | 8 +- lib/pages/main/controller.dart | 11 +- lib/pages/main/view.dart | 8 +- lib/pages/media/controller.dart | 11 +- lib/pages/member/controller.dart | 11 +- lib/pages/member/view.dart | 16 ++- lib/pages/member_coin_arc/view.dart | 7 +- lib/pages/member_like_arc/view.dart | 7 +- lib/pages/member_profile/view.dart | 56 ++++++-- lib/pages/mine/controller.dart | 30 ++-- lib/pages/pgc/controller.dart | 17 +-- lib/pages/pgc/view.dart | 4 +- lib/pages/subscription/controller.dart | 9 +- .../video/introduction/pgc/controller.dart | 16 +-- .../introduction/pgc/widgets/pgc_panel.dart | 12 +- .../video/introduction/ugc/controller.dart | 25 ++-- lib/pages/video/member/view.dart | 11 +- lib/pages/video/send_danmaku/view.dart | 11 +- lib/pages/whisper_detail/controller.dart | 8 +- lib/pages/whisper_detail/view.dart | 8 +- lib/plugin/pl_player/controller.dart | 2 - lib/services/account_service.dart | 20 +++ lib/utils/login_utils.dart | 134 +++++++----------- 51 files changed, 342 insertions(+), 299 deletions(-) create mode 100644 lib/services/account_service.dart diff --git a/lib/main.dart b/lib/main.dart index 26823d8af..89955b6ab 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,6 +7,7 @@ import 'package:PiliPlus/models/common/theme/theme_color_type.dart'; import 'package:PiliPlus/pages/main/view.dart'; import 'package:PiliPlus/pages/video/view.dart'; import 'package:PiliPlus/router/app_pages.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/services/loggeer.dart'; import 'package:PiliPlus/services/service_locator.dart'; import 'package:PiliPlus/utils/app_scheme.dart'; @@ -32,6 +33,7 @@ void main() async { WidgetsFlutterBinding.ensureInitialized(); MediaKit.ensureInitialized(); await GStorage.init(); + Get.put(AccountService()); if (GStorage.setting.get(SettingBoxKey.autoClearCache, defaultValue: false)) { await CacheManage.clearLibraryCache(); } else { diff --git a/lib/pages/article/controller.dart b/lib/pages/article/controller.dart index e7f92dd22..e85ebd4b4 100644 --- a/lib/pages/article/controller.dart +++ b/lib/pages/article/controller.dart @@ -161,7 +161,7 @@ class ArticleController extends ReplyController { } if (isLoaded.value) { queryData(); - if (isLogin && !MineController.anonymity.value) { + if (accountService.isLogin.value && !MineController.anonymity.value) { VideoHttp.historyReport(aid: commentId, type: 5); } } diff --git a/lib/pages/common/reply_controller.dart b/lib/pages/common/reply_controller.dart index 465731c1f..7c815ef33 100644 --- a/lib/pages/common/reply_controller.dart +++ b/lib/pages/common/reply_controller.dart @@ -6,6 +6,7 @@ import 'package:PiliPlus/http/reply.dart'; import 'package:PiliPlus/models/common/reply/reply_sort_type.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/video/reply_new/view.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/reply_utils.dart'; import 'package:PiliPlus/utils/request_utils.dart'; @@ -24,7 +25,7 @@ abstract class ReplyController extends CommonListController { late final savedReplies = {}; - late final bool isLogin = Accounts.main.isLogin; + AccountService accountService = Get.find(); Int64? upMid; Int64? cursorNext; diff --git a/lib/pages/contact/view.dart b/lib/pages/contact/view.dart index f8d14c4c5..0f5f00ea5 100644 --- a/lib/pages/contact/view.dart +++ b/lib/pages/contact/view.dart @@ -3,7 +3,7 @@ import 'package:PiliPlus/pages/fan/view.dart'; import 'package:PiliPlus/pages/follow/child_view.dart'; import 'package:PiliPlus/pages/follow_search/view.dart'; import 'package:PiliPlus/pages/share/view.dart' show UserModel; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -18,7 +18,7 @@ class ContactPage extends StatefulWidget { class _ContactPageState extends State with SingleTickerProviderStateMixin { - final mid = Accounts.main.mid; + AccountService accountService = Get.find(); late final _controller = TabController(length: 2, vsync: this); @override @@ -49,7 +49,7 @@ class _ContactPageState extends State UserModel? userModel = await Navigator.of(context).push( GetPageRoute( page: () => FollowSearchPage( - mid: mid, + mid: accountService.mid, isFromSelect: widget.isFromSelect, ), ), @@ -67,11 +67,11 @@ class _ContactPageState extends State controller: _controller, children: [ FollowChildPage( - mid: mid, + mid: accountService.mid, onSelect: widget.isFromSelect ? onSelect : null, ), FansPage( - mid: mid, + mid: accountService.mid, onSelect: widget.isFromSelect ? onSelect : null, ), ], diff --git a/lib/pages/danmaku/controller.dart b/lib/pages/danmaku/controller.dart index 2022a9630..f105d28a0 100644 --- a/lib/pages/danmaku/controller.dart +++ b/lib/pages/danmaku/controller.dart @@ -1,6 +1,8 @@ import 'package:PiliPlus/grpc/bilibili/community/service/dm/v1.pb.dart'; import 'package:PiliPlus/grpc/dm.dart'; import 'package:PiliPlus/plugin/pl_player/controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; +import 'package:get/get.dart'; class PlDanmakuController { PlDanmakuController( @@ -11,6 +13,8 @@ class PlDanmakuController { final PlPlayerController plPlayerController; final bool mergeDanmaku; + AccountService accountService = Get.find(); + Map> dmSegMap = {}; // 已请求的段落标记 Set requestedSeg = {}; @@ -58,7 +62,7 @@ class PlDanmakuController { element.count = count!; } } - if (plPlayerController.isLogin) { + if (accountService.isLogin.value) { element.isSelf = element.midHash == plPlayerController.midHash; } int pos = element.progress ~/ 100; //每0.1秒存储一次 diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 160e4481c..8b67359bb 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -9,6 +9,7 @@ import 'package:PiliPlus/models_new/follow/list.dart'; import 'package:PiliPlus/pages/common/common_controller.dart'; import 'package:PiliPlus/pages/dynamics_tab/controller.dart'; import 'package:PiliPlus/pages/dynamics_tab/view.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:easy_debounce/easy_throttle.dart'; @@ -27,9 +28,6 @@ class DynamicsController extends GetxController late TabController tabController; Set tempBannedList = {}; late List tabsPageList; - RxBool isLogin = false.obs; - dynamic ownerMid; - dynamic face; List hasUpdatedUps = []; int allFollowedUpsPage = 1; int allFollowedUpsTotal = 0; @@ -39,6 +37,8 @@ class DynamicsController extends GetxController final upPanelPosition = GStorage.upPanelPosition; + AccountService accountService = Get.find(); + DynamicsTabController? get controller { try { return Get.find( @@ -51,12 +51,6 @@ class DynamicsController extends GetxController @override void onInit() { super.onInit(); - - dynamic userInfo = GStorage.userInfo.get('userInfoCache'); - ownerMid = userInfo?.mid; - face = userInfo?.face; - isLogin.value = userInfo != null; - tabController = TabController( length: DynamicsTabType.values.length, vsync: this, @@ -76,7 +70,7 @@ class DynamicsController extends GetxController return; } var res = await FollowHttp.followings( - vmid: ownerMid, + vmid: accountService.mid, pn: allFollowedUpsPage, ps: 50, orderType: 'attention', @@ -107,7 +101,7 @@ class DynamicsController extends GetxController Future queryFollowUp({String type = 'init'}) async { if (isQuerying) return; isQuerying = true; - if (!isLogin.value) { + if (!accountService.isLogin.value) { upData ..value.errMsg = '账号未登录' ..refresh(); @@ -118,7 +112,7 @@ class DynamicsController extends GetxController allFollowedUpsPage = 1; final f1 = DynamicsHttp.followUp(); final f2 = FollowHttp.followings( - vmid: ownerMid, + vmid: accountService.mid, pn: allFollowedUpsPage, ps: 50, orderType: 'attention', diff --git a/lib/pages/dynamics/view.dart b/lib/pages/dynamics/view.dart index 0620c0010..4a5eba5f6 100644 --- a/lib/pages/dynamics/view.dart +++ b/lib/pages/dynamics/view.dart @@ -39,7 +39,7 @@ class _DynamicsPageState extends State }), ), onPressed: () { - if (_dynamicsController.isLogin.value) { + if (_dynamicsController.accountService.isLogin.value) { CreateDynPanel.onCreateDyn(context); } }, diff --git a/lib/pages/dynamics/widgets/up_panel.dart b/lib/pages/dynamics/widgets/up_panel.dart index 1ccfbf82b..b8cf240b2 100644 --- a/lib/pages/dynamics/widgets/up_panel.dart +++ b/lib/pages/dynamics/widgets/up_panel.dart @@ -30,7 +30,7 @@ class _UpPanelState extends State { @override Widget build(BuildContext context) { final theme = Theme.of(context); - if (!widget.dynamicsController.isLogin.value) { + if (!widget.dynamicsController.accountService.isLogin.value) { return const SizedBox.shrink(); } return CustomScrollView( @@ -102,12 +102,14 @@ class _UpPanelState extends State { child: upItemBuild(theme, UpItem(face: '', uname: '全部动态', mid: -1)), ), SliverToBoxAdapter( - child: upItemBuild( - theme, - UpItem( - uname: '我', - face: widget.dynamicsController.face, - mid: widget.dynamicsController.ownerMid, + child: Obx( + () => upItemBuild( + theme, + UpItem( + uname: '我', + face: widget.dynamicsController.accountService.face.value, + mid: widget.dynamicsController.accountService.mid, + ), ), ), ), diff --git a/lib/pages/dynamics_topic/controller.dart b/lib/pages/dynamics_topic/controller.dart index 40010c255..c0533d59a 100644 --- a/lib/pages/dynamics_topic/controller.dart +++ b/lib/pages/dynamics_topic/controller.dart @@ -6,8 +6,8 @@ import 'package:PiliPlus/models_new/dynamic/dyn_topic_feed/topic_card_list.dart' import 'package:PiliPlus/models_new/dynamic/dyn_topic_feed/topic_sort_by_conf.dart'; import 'package:PiliPlus/models_new/dynamic/dyn_topic_top/top_details.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; -import 'package:PiliPlus/utils/storage.dart' show Accounts; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -23,12 +23,13 @@ class DynTopicController double? appbarOffset; // top - final isLogin = Accounts.main.isLogin; Rx isFav = Rx(null); Rx isLike = Rx(null); Rx> topState = LoadingState.loading().obs; + AccountService accountService = Get.find(); + @override void onInit() { super.onInit(); @@ -91,7 +92,7 @@ class DynTopicController } Future onFav() async { - if (!isLogin) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -112,7 +113,7 @@ class DynTopicController } Future onLike() async { - if (!isLogin) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/dynamics_topic/view.dart b/lib/pages/dynamics_topic/view.dart index ea538c52d..f23fe30c0 100644 --- a/lib/pages/dynamics_topic/view.dart +++ b/lib/pages/dynamics_topic/view.dart @@ -45,7 +45,7 @@ class _DynTopicPageState extends State { resizeToAvoidBottomInset: false, floatingActionButton: FloatingActionButton.extended( onPressed: () { - if (_controller.isLogin) { + if (_controller.accountService.isLogin.value) { CreateDynPanel.onCreateDyn( context, topic: Pair( @@ -304,7 +304,7 @@ class _DynTopicPageState extends State { PopupMenuItem( child: const Text('举报'), onTap: () { - if (!_controller.isLogin) { + if (!_controller.accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index 6bb602e88..adaa9aaef 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -15,6 +15,7 @@ import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/common/episode_panel_type.dart'; import 'package:PiliPlus/models/common/stat_type.dart'; +import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart' as pgc; import 'package:PiliPlus/models_new/video/video_detail/episode.dart' as ugc; import 'package:PiliPlus/models_new/video/video_detail/page.dart'; @@ -391,11 +392,8 @@ class _EpisodePanelState extends CommonSlidePageState { child: InkWell( onTap: () { if (episode.badge != null && episode.badge == "会员") { - dynamic userInfo = GStorage.userInfo.get('userInfoCache'); - int vipStatus = 0; - if (userInfo != null) { - vipStatus = userInfo.vipStatus; - } + UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + int vipStatus = userInfo?.vipStatus ?? 0; if (vipStatus != 1) { SmartDialog.showToast('需要大会员'); // return; diff --git a/lib/pages/fan/view.dart b/lib/pages/fan/view.dart index 42e8ad3ca..95c2a0281 100644 --- a/lib/pages/fan/view.dart +++ b/lib/pages/fan/view.dart @@ -8,8 +8,8 @@ import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models_new/fans/list.dart'; import 'package:PiliPlus/pages/fan/controller.dart'; import 'package:PiliPlus/pages/share/view.dart' show UserModel; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/grid.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -37,13 +37,13 @@ class _FansPageState extends State { @override void initState() { super.initState(); - final userInfo = GStorage.userInfo.get('userInfoCache'); + AccountService accountService = Get.find(); mid = widget.mid ?? (Get.parameters['mid'] != null ? int.parse(Get.parameters['mid']!) - : userInfo?.mid); - isOwner = mid == userInfo?.mid; - name = Get.parameters['name'] ?? userInfo?.uname; + : accountService.mid); + isOwner = mid == accountService.mid; + name = Get.parameters['name'] ?? accountService.name.value; _fansController = Get.put(FansController(mid), tag: Utils.makeHeroTag(mid)); } diff --git a/lib/pages/fav/video/controller.dart b/lib/pages/fav/video/controller.dart index 57cdcfeaf..da4a803d2 100644 --- a/lib/pages/fav/video/controller.dart +++ b/lib/pages/fav/video/controller.dart @@ -3,11 +3,12 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; +import 'package:get/get.dart'; class FavController extends CommonListController { - late final dynamic mid = Accounts.main.mid; + AccountService accountService = Get.find(); @override void onInit() { @@ -17,7 +18,7 @@ class FavController @override Future queryData([bool isRefresh = true]) { - if (mid == 0) { + if (!accountService.isLogin.value) { loadingState.value = const Error('账号未登录'); return Future.value(); } @@ -41,6 +42,6 @@ class FavController Future> customGetData() => FavHttp.userfavFolder( pn: page, ps: 20, - mid: mid, + mid: accountService.mid, ); } diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index 3c30cad6e..7d4516a03 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -5,9 +5,9 @@ import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; import 'package:PiliPlus/pages/common/multi_select_controller.dart'; import 'package:PiliPlus/pages/fav_sort/view.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -20,7 +20,7 @@ class FavDetailController final Rx item = FavVideoItemModel().obs; final Rx isOwner = Rx(null); - final int mid = Accounts.main.mid; + AccountService accountService = Get.find(); @override void onInit() { @@ -52,7 +52,7 @@ class FavDetailController FavDetailData data = response.response; if (isRefresh) { item.value = data.info ?? FavVideoItemModel(); - isOwner.value = data.info?.mid == mid; + isOwner.value = data.info?.mid == accountService.mid; } return false; } @@ -174,7 +174,7 @@ class FavDetailController } Future onFav(bool isFav) async { - if (mid == 0) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index bf48866c9..4f00fa126 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -250,7 +250,7 @@ class _FavDetailPageState extends State { isCopy: true, ctr: _favDetailController, mediaId: _favDetailController.mediaId, - mid: _favDetailController.mid, + mid: _favDetailController.accountService.mid, ), child: Text( '复制', @@ -269,7 +269,7 @@ class _FavDetailPageState extends State { isCopy: false, ctr: _favDetailController, mediaId: _favDetailController.mediaId, - mid: _favDetailController.mid, + mid: _favDetailController.accountService.mid, ), child: Text( '移动', diff --git a/lib/pages/follow/controller.dart b/lib/pages/follow/controller.dart index e006e704c..087b2d82e 100644 --- a/lib/pages/follow/controller.dart +++ b/lib/pages/follow/controller.dart @@ -1,6 +1,7 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/member.dart'; import 'package:PiliPlus/models/member/tags.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -23,8 +24,7 @@ class FollowController extends GetxController with GetTickerProviderStateMixin { ? int.parse(Get.parameters['mid']!) : ownerMid; isOwner = ownerMid == mid; - name = - Get.parameters['name'] ?? GStorage.userInfo.get('userInfoCache')?.uname; + name = Get.parameters['name'] ?? Get.find().name.value; if (isOwner) { queryFollowUpTags(); } diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index d93114a75..75bcefda4 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -6,6 +6,7 @@ import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/models/common/home_tab_type.dart'; import 'package:PiliPlus/pages/common/common_controller.dart'; import 'package:PiliPlus/pages/mine/view.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter/foundation.dart' show kDebugMode; @@ -17,9 +18,6 @@ class HomeController extends GetxController late List tabs; late TabController tabController; - RxBool isLogin = false.obs; - RxString userFace = ''.obs; - StreamController? searchBarStream; late bool hideSearchBar; late bool useSideBar; @@ -33,12 +31,11 @@ class HomeController extends GetxController @override ScrollController get scrollController => controller.scrollController; + AccountService accountService = Get.find(); + @override void onInit() { super.onInit(); - final userInfo = GStorage.userInfo.get('userInfoCache'); - isLogin.value = userInfo != null; - userFace.value = userInfo != null ? userInfo.face! : ''; hideSearchBar = GStorage.setting.get(SettingBoxKey.hideSearchBar, defaultValue: true); diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 52ea9a671..0a43eebfa 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -78,7 +78,7 @@ class _HomePageState extends State searchBar(theme), const SizedBox(width: 4), Obx( - () => _homeController.isLogin.value + () => _homeController.accountService.isLogin.value ? msgBadge(_mainController) : const SizedBox.shrink(), ), @@ -86,7 +86,7 @@ class _HomePageState extends State Semantics( label: "我的", child: Obx( - () => _homeController.isLogin.value + () => _homeController.accountService.isLogin.value ? Stack( clipBehavior: Clip.none, children: [ @@ -94,7 +94,7 @@ class _HomePageState extends State type: ImageType.avatar, width: 34, height: 34, - src: _homeController.userFace.value, + src: _homeController.accountService.face.value, ), Positioned.fill( child: Material( diff --git a/lib/pages/later/child_view.dart b/lib/pages/later/child_view.dart index b28197c3e..1cc43b3bc 100644 --- a/lib/pages/later/child_view.dart +++ b/lib/pages/later/child_view.dart @@ -93,7 +93,7 @@ class _LaterViewChildPageState extends State 'count': _laterController .baseCtr.counts[LaterViewType.all], 'favTitle': '稍后再看', - 'mediaId': _laterController.mid, + 'mediaId': _laterController.accountService.mid, 'desc': false, 'isContinuePlaying': index != 0, }, diff --git a/lib/pages/later/controller.dart b/lib/pages/later/controller.dart index ae5f0896e..efc3f46a0 100644 --- a/lib/pages/later/controller.dart +++ b/lib/pages/later/controller.dart @@ -7,9 +7,9 @@ import 'package:PiliPlus/models_new/later/data.dart'; import 'package:PiliPlus/models_new/later/list.dart'; import 'package:PiliPlus/pages/common/multi_select_controller.dart'; import 'package:PiliPlus/pages/later/base_controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -21,7 +21,8 @@ class LaterController extends MultiSelectController { ); final LaterViewType laterViewType; - dynamic mid; + AccountService accountService = Get.find(); + final RxBool asc = false.obs; final LaterBaseController baseCtr = Get.put(LaterBaseController()); @@ -65,7 +66,6 @@ class LaterController extends MultiSelectController { @override void onInit() { super.onInit(); - mid = Accounts.main.mid; queryData(); } @@ -219,7 +219,7 @@ class LaterController extends MultiSelectController { 'sourceType': 'watchLater', 'count': baseCtr.counts[LaterViewType.all], 'favTitle': '稍后再看', - 'mediaId': mid, + 'mediaId': accountService.mid, 'desc': false, }, ); diff --git a/lib/pages/later/view.dart b/lib/pages/later/view.dart index c29ae620b..a2b04fc77 100644 --- a/lib/pages/later/view.dart +++ b/lib/pages/later/view.dart @@ -272,7 +272,7 @@ class _LaterPageState extends State isCopy: true, ctr: ctr, mediaId: null, - mid: ctr.mid, + mid: ctr.accountService.mid, ); }, child: Text( @@ -293,7 +293,7 @@ class _LaterPageState extends State isCopy: false, ctr: ctr, mediaId: null, - mid: ctr.mid, + mid: ctr.accountService.mid, ); }, child: Text( diff --git a/lib/pages/live/controller.dart b/lib/pages/live/controller.dart index 7621d50e6..2906a7dd4 100644 --- a/lib/pages/live/controller.dart +++ b/lib/pages/live/controller.dart @@ -5,8 +5,8 @@ import 'package:PiliPlus/models_new/live/live_feed_index/card_data_list_item.dar import 'package:PiliPlus/models_new/live/live_feed_index/card_list.dart'; import 'package:PiliPlus/models_new/live/live_second_list/tag.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; -import 'package:get/get_rx/src/rx_types/rx_types.dart'; +import 'package:PiliPlus/services/account_service.dart'; +import 'package:get/get.dart'; class LiveController extends CommonListController { @override @@ -15,6 +15,8 @@ class LiveController extends CommonListController { queryData(); } + AccountService accountService = Get.find(); + int? count; // area @@ -29,7 +31,6 @@ class LiveController extends CommonListController { final Rx> topState = Pair(first: null, second: null).obs; - final RxBool isLogin = Accounts.main.isLogin.obs; @override void checkIsEnd(int length) { @@ -71,13 +72,14 @@ class LiveController extends CommonListController { if (areaIndex.value != 0) { return LiveHttp.liveSecondList( pn: page, - isLogin: isLogin.value, + isLogin: accountService.isLogin.value, areaId: areaId, parentAreaId: parentAreaId, sortType: sortType, ); } - return LiveHttp.liveFeedIndex(pn: page, isLogin: isLogin.value); + return LiveHttp.liveFeedIndex( + pn: page, isLogin: accountService.isLogin.value); } @override @@ -94,7 +96,7 @@ class LiveController extends CommonListController { Future queryTop() async { final res = await LiveHttp.liveFeedIndex( pn: page, - isLogin: isLogin.value, + isLogin: accountService.isLogin.value, moduleSelect: true, ); if (res.isSuccess) { diff --git a/lib/pages/live_area/controller.dart b/lib/pages/live_area/controller.dart index 50e62d13d..d91e21012 100644 --- a/lib/pages/live_area/controller.dart +++ b/lib/pages/live_area/controller.dart @@ -3,20 +3,20 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/live/live_area_list/area_item.dart'; import 'package:PiliPlus/models_new/live/live_area_list/area_list.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; class LiveAreaController extends CommonListController?, AreaList> { - final isLogin = Accounts.main.isLogin; + AccountService accountService = Get.find(); late final isEditing = false.obs; @override void onInit() { super.onInit(); - if (isLogin) { + if (accountService.isLogin.value) { queryFavTags(); } queryData(); @@ -24,7 +24,7 @@ class LiveAreaController @override Future onRefresh() { - if (isLogin) { + if (accountService.isLogin.value) { queryFavTags(); } return super.onRefresh(); @@ -35,10 +35,11 @@ class LiveAreaController @override Future?>> customGetData() => - LiveHttp.liveAreaList(isLogin: isLogin); + LiveHttp.liveAreaList(isLogin: accountService.isLogin.value); Future queryFavTags() async { - favState.value = await LiveHttp.getLiveFavTag(isLogin: isLogin); + favState.value = + await LiveHttp.getLiveFavTag(isLogin: accountService.isLogin.value); } Future setFavTag() async { diff --git a/lib/pages/live_area/view.dart b/lib/pages/live_area/view.dart index 03767a2d7..4abb971e4 100644 --- a/lib/pages/live_area/view.dart +++ b/lib/pages/live_area/view.dart @@ -32,7 +32,7 @@ class _LiveAreaPageState extends State { return Scaffold( appBar: AppBar( title: const Text('全部标签'), - actions: _controller.isLogin + actions: _controller.accountService.isLogin.value ? [ TextButton( onPressed: _controller.onEdit, @@ -52,7 +52,7 @@ class _LiveAreaPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (_controller.isLogin) + if (_controller.accountService.isLogin.value) Obx(() => _buildFavWidget(theme, _controller.favState.value)), Expanded( child: diff --git a/lib/pages/live_area_detail/child/controller.dart b/lib/pages/live_area_detail/child/controller.dart index eff263d7f..e5e860019 100644 --- a/lib/pages/live_area_detail/child/controller.dart +++ b/lib/pages/live_area_detail/child/controller.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/models_new/live/live_feed_index/card_data_list_item.dar import 'package:PiliPlus/models_new/live/live_second_list/data.dart'; import 'package:PiliPlus/models_new/live/live_second_list/tag.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:get/get.dart'; class LiveAreaChildController @@ -23,7 +23,7 @@ class LiveAreaChildController final RxInt tagIndex = 0.obs; List? newTags; - final isLogin = Accounts.main.isLogin; + AccountService accountService = Get.find(); @override void onInit() { @@ -51,7 +51,7 @@ class LiveAreaChildController Future> customGetData() => LiveHttp.liveSecondList( pn: page, - isLogin: isLogin, + isLogin: accountService.isLogin.value, areaId: areaId, parentAreaId: parentAreaId, sortType: sortType, diff --git a/lib/pages/live_area_detail/controller.dart b/lib/pages/live_area_detail/controller.dart index 1d74e3a24..554bb1bd6 100644 --- a/lib/pages/live_area_detail/controller.dart +++ b/lib/pages/live_area_detail/controller.dart @@ -4,7 +4,8 @@ import 'package:PiliPlus/http/live.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/live/live_area_list/area_item.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; +import 'package:get/get.dart'; class LiveAreaDatailController extends CommonListController?, AreaItem> { @@ -13,7 +14,8 @@ class LiveAreaDatailController final dynamic parentAreaId; late int initialIndex = 0; - final isLogin = Accounts.main.isLogin; + + AccountService accountService = Get.find(); @override void onInit() { @@ -32,7 +34,7 @@ class LiveAreaDatailController @override Future?>> customGetData() => LiveHttp.liveRoomAreaList( - isLogin: isLogin, + isLogin: accountService.isLogin.value, parentid: parentAreaId, ); } diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart index 1fedf0336..a36252758 100644 --- a/lib/pages/live_room/controller.dart +++ b/lib/pages/live_room/controller.dart @@ -12,6 +12,7 @@ import 'package:PiliPlus/models_new/live/live_room_play_info/data.dart'; import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/plugin/pl_player/controller.dart'; import 'package:PiliPlus/plugin/pl_player/models/data_source.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/services/service_locator.dart'; import 'package:PiliPlus/tcp/live.dart'; import 'package:PiliPlus/utils/danmaku_utils.dart'; @@ -48,15 +49,14 @@ class LiveRoomController extends GetxController { String? savedDanmaku; - late final isLogin = Accounts.main.isLogin; - late final mid = Accounts.main.mid; + AccountService accountService = Get.find(); @override void onInit() { super.onInit(); roomId = int.parse(Get.parameters['roomid']!); queryLiveInfoH5(); - if (isLogin && !MineController.anonymity.value) { + if (accountService.isLogin.value && !MineController.anonymity.value) { VideoHttp.roomEntryAction(roomId: roomId); } } @@ -236,7 +236,7 @@ class LiveRoomController extends GetxController { extra['content'], color: DmUtils.decimalToColor(extra['color']), type: DmUtils.getPosition(extra['mode']), - selfSend: uid == mid, + selfSend: uid == accountService.mid, ), ); WidgetsBinding.instance diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index 723bab497..0a0c8375a 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -587,7 +587,7 @@ class _LiveRoomPageState extends State ); void onSendDanmaku([bool fromEmote = false]) { - if (!_liveRoomController.isLogin) { + if (!_liveRoomController.accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/live_search/child/controller.dart b/lib/pages/live_search/child/controller.dart index b7d8c17c7..6c573b09d 100644 --- a/lib/pages/live_search/child/controller.dart +++ b/lib/pages/live_search/child/controller.dart @@ -4,16 +4,18 @@ import 'package:PiliPlus/models/common/live_search_type.dart'; import 'package:PiliPlus/models_new/live/live_search/data.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/live_search/controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; +import 'package:get/get.dart'; class LiveSearchChildController extends CommonListController { LiveSearchChildController(this.controller, this.searchType); - final isLogin = Accounts.main.isLogin; final LiveSearchController controller; final LiveSearchType searchType; + AccountService accountService = Get.find(); + @override void checkIsEnd(int length) { switch (searchType) { @@ -46,7 +48,7 @@ class LiveSearchChildController @override Future> customGetData() { return LiveHttp.liveSearch( - isLogin: isLogin, + isLogin: accountService.isLogin.value, page: page, keyword: controller.editingController.text, type: searchType, diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 99fe0dbf2..a1c9aeab8 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -8,6 +8,7 @@ import 'package:PiliPlus/models/common/msg/msg_unread_type.dart'; import 'package:PiliPlus/models/common/nav_bar_config.dart'; import 'package:PiliPlus/models_new/msgfeed_unread/data.dart'; import 'package:PiliPlus/models_new/single_unread/data.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; @@ -15,6 +16,8 @@ import 'package:get/get.dart'; class MainController extends GetxController with GetSingleTickerProviderStateMixin { + AccountService accountService = Get.find(); + List navigationBars = []; RxInt dynCount = 0.obs; @@ -22,7 +25,6 @@ class MainController extends GetxController late bool hideTabBar; late dynamic controller; RxInt selectedIndex = 0.obs; - RxBool isLogin = false.obs; late DynamicBadgeMode dynamicBadgeMode; late bool checkDynamic = GStorage.checkDynamic; @@ -61,7 +63,6 @@ class MainController extends GetxController if (navigationBars.length > 1 && hideTabBar) { bottomBarStream = StreamController.broadcast(); } - isLogin.value = Accounts.main.isLogin; dynamicBadgeMode = DynamicBadgeMode.values[GStorage.setting.get( SettingBoxKey.dynamicBadgeMode, defaultValue: DynamicBadgeMode.number.index)]; @@ -133,7 +134,7 @@ class MainController extends GetxController } Future queryUnreadMsg([bool isChangeType = false]) async { - if (!isLogin.value || + if (!accountService.isLogin.value || homeIndex == -1 || msgUnReadTypes.isEmpty || msgBadgeMode == DynamicBadgeMode.hidden) { @@ -160,7 +161,7 @@ class MainController extends GetxController } Future getUnreadDynamic() async { - if (!isLogin.value || dynIndex == -1) { + if (!accountService.isLogin.value || dynIndex == -1) { return; } DynGrpc.dynRed().then((res) { @@ -177,7 +178,7 @@ class MainController extends GetxController void checkUnreadDynamic() { if (dynIndex == -1 || - !isLogin.value || + !accountService.isLogin.value || dynamicBadgeMode == DynamicBadgeMode.hidden || !checkDynamic) { return; diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index eca184294..9bc34e616 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -104,7 +104,7 @@ class _MainAppState extends State } void _checkUnread([bool shouldCheck = false]) { - if (_mainController.isLogin.value && + if (_mainController.accountService.isLogin.value && _mainController.homeIndex != -1 && _mainController.msgBadgeMode != DynamicBadgeMode.hidden) { if (shouldCheck && @@ -389,7 +389,7 @@ class _MainAppState extends State Semantics( label: "我的", child: Obx( - () => _homeController.isLogin.value + () => _mainController.accountService.isLogin.value ? Stack( clipBehavior: Clip.none, children: [ @@ -397,7 +397,7 @@ class _MainAppState extends State type: ImageType.avatar, width: 34, height: 34, - src: _homeController.userFace.value, + src: _mainController.accountService.face.value, ), Positioned.fill( child: Material( @@ -443,7 +443,7 @@ class _MainAppState extends State ), const SizedBox(height: 8), Obx( - () => _homeController.isLogin.value + () => _mainController.accountService.isLogin.value ? msgBadge(_mainController) : const SizedBox.shrink(), ), diff --git a/lib/pages/media/controller.dart b/lib/pages/media/controller.dart index b2c3c211e..1a318998f 100644 --- a/lib/pages/media/controller.dart +++ b/lib/pages/media/controller.dart @@ -2,7 +2,7 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; import 'package:PiliPlus/pages/common/common_data_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -34,14 +34,14 @@ class MediaController extends CommonDataController { ), ), ]; - int? mid; RxInt count = (-1).obs; + AccountService accountService = Get.find(); + @override void onInit() { super.onInit(); - mid = Accounts.main.mid; - if (mid != 0) { + if (accountService.isLogin.value) { queryData(); } } @@ -55,11 +55,10 @@ class MediaController extends CommonDataController { @override Future> customGetData() { - mid ??= Accounts.main.mid; return FavHttp.userfavFolder( pn: 1, ps: 5, - mid: mid, + mid: accountService.mid, ); } } diff --git a/lib/pages/member/controller.dart b/lib/pages/member/controller.dart index 856e665fc..dda1cf4cd 100644 --- a/lib/pages/member/controller.dart +++ b/lib/pages/member/controller.dart @@ -8,6 +8,7 @@ import 'package:PiliPlus/models/common/member/tab_type.dart'; import 'package:PiliPlus/models_new/space/space/data.dart'; import 'package:PiliPlus/models_new/space/space/tab2.dart'; import 'package:PiliPlus/pages/common/common_data_controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/request_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -22,10 +23,11 @@ class MemberController extends CommonDataController with GetTickerProviderStateMixin { MemberController({required this.mid}); int mid; - int? ownerMid; String? username; RxBool showUname = false.obs; + AccountService accountService = Get.find(); + dynamic live; int? silence; String? endTime; @@ -56,7 +58,6 @@ class MemberController extends CommonDataController @override void onInit() { super.onInit(); - ownerMid = Accounts.main.mid; queryData(); } @@ -156,7 +157,7 @@ class MemberController extends CommonDataController ); void blockUser(BuildContext context) { - if (ownerMid == 0) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -203,12 +204,12 @@ class MemberController extends CommonDataController } void onFollow(BuildContext context) { - if (mid == ownerMid) { + if (mid == accountService.mid) { Get.toNamed('/editProfile'); } else if (relation.value == 128) { _onBlock(); } else { - if (ownerMid == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/member/view.dart b/lib/pages/member/view.dart index 726052a39..5a6c8bef7 100644 --- a/lib/pages/member/view.dart +++ b/lib/pages/member/view.dart @@ -82,8 +82,8 @@ class _MemberPageState extends State { PopupMenuButton( icon: const Icon(Icons.more_vert), itemBuilder: (BuildContext context) => [ - if (_userController.ownerMid != 0 && - _userController.ownerMid != _mid) ...[ + if (_userController.accountService.isLogin.value && + _userController.accountService.mid != _mid) ...[ PopupMenuItem( onTap: () => _userController.blockUser(context), child: Row( @@ -117,7 +117,9 @@ class _MemberPageState extends State { children: [ const Icon(Icons.share_outlined, size: 19), const SizedBox(width: 10), - Text(_userController.ownerMid != _mid ? '分享UP主' : '分享我的主页'), + Text(_userController.accountService.mid != _mid + ? '分享UP主' + : '分享我的主页'), ], ), ), @@ -137,8 +139,9 @@ class _MemberPageState extends State { ], ), ), - if (_userController.ownerMid != 0) - if (_userController.mid == _userController.ownerMid) ...[ + if (_userController.accountService.isLogin.value) + if (_userController.mid == + _userController.accountService.mid) ...[ if ((_userController .loadingState.value.data?.card?.vip?.status ?? 0) > @@ -314,7 +317,8 @@ class _MemberPageState extends State { ? Obx( () => UserInfoCard( isV: isV, - isOwner: _userController.mid == _userController.ownerMid, + isOwner: + _userController.mid == _userController.accountService.mid, relation: _userController.relation.value, card: response.card!, images: response.images!, diff --git a/lib/pages/member_coin_arc/view.dart b/lib/pages/member_coin_arc/view.dart index e534bd6bf..e92e02623 100644 --- a/lib/pages/member_coin_arc/view.dart +++ b/lib/pages/member_coin_arc/view.dart @@ -5,8 +5,8 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/member/coin_like_arc/item.dart'; import 'package:PiliPlus/pages/member_coin_arc/controller.dart'; import 'package:PiliPlus/pages/member_coin_arc/widgets/item.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/grid.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -26,7 +26,7 @@ class MemberCoinArcPage extends StatefulWidget { } class _MemberCoinArcPageState extends State { - late final _ownerMid = Accounts.main.mid; + AccountService accountService = Get.find(); late final _ctr = Get.put( MemberCoinArcController(mid: widget.mid), @@ -37,7 +37,8 @@ class _MemberCoinArcPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('${widget.mid == _ownerMid ? '我' : '${widget.name}'}的最近投币'), + title: Text( + '${widget.mid == accountService.mid ? '我' : '${widget.name}'}的最近投币'), ), body: SafeArea( top: false, diff --git a/lib/pages/member_like_arc/view.dart b/lib/pages/member_like_arc/view.dart index 45369f1b6..bb7efafb0 100644 --- a/lib/pages/member_like_arc/view.dart +++ b/lib/pages/member_like_arc/view.dart @@ -5,8 +5,8 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/member/coin_like_arc/item.dart'; import 'package:PiliPlus/pages/member_coin_arc/widgets/item.dart'; import 'package:PiliPlus/pages/member_like_arc/controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/grid.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -26,7 +26,7 @@ class MemberLikeArcPage extends StatefulWidget { } class _MemberLikeArcPageState extends State { - late final _ownerMid = Accounts.main.mid; + AccountService accountService = Get.find(); late final _ctr = Get.put( MemberLikeArcController(mid: widget.mid), @@ -37,7 +37,8 @@ class _MemberLikeArcPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('${widget.mid == _ownerMid ? '我' : '${widget.name}'}的推荐'), + title: Text( + '${widget.mid == accountService.mid ? '我' : '${widget.name}'}的推荐'), ), body: SafeArea( top: false, diff --git a/lib/pages/member_profile/view.dart b/lib/pages/member_profile/view.dart index ced0ba886..96a3e52df 100644 --- a/lib/pages/member_profile/view.dart +++ b/lib/pages/member_profile/view.dart @@ -4,7 +4,10 @@ import 'package:PiliPlus/http/constants.dart'; import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/member/profile_type.dart'; +import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/models_new/account_myinfo/data.dart'; +import 'package:PiliPlus/pages/mine/controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; @@ -33,6 +36,7 @@ class _EditProfilePageState extends State { LoadingState.loading(); late final _textController = TextEditingController(); late final _imagePicker = ImagePicker(); + AccountService accountService = Get.find(); @override void initState() { @@ -69,13 +73,32 @@ class _EditProfilePageState extends State { .get('${HttpString.appBaseUrl}/x/v2/account/myinfo', queryParameters: data) .then((res) { - setState(() { - if (res.data['code'] == 0) { - _loadingState = Success(AccountMyInfoData.fromJson(res.data['data'])); - } else { - _loadingState = Error(res.data['message']); - } - }); + if (mounted) { + setState(() { + if (res.data['code'] == 0) { + AccountMyInfoData data = + AccountMyInfoData.fromJson(res.data['data']); + _loadingState = Success(data); + accountService + ..name.value = data.name! + ..face.value = data.face!; + try { + UserInfoData userInfo = GStorage.userInfo.get('userInfoCache') + ..uname = data.name + ..face = data.face; + GStorage.userInfo.put('userInfoCache', userInfo); + } catch (_) {} + try { + Get.find().userInfo + ..value.uname = data.name + ..value.face = data.face + ..refresh(); + } catch (_) {} + } else { + _loadingState = Error(res.data['message']); + } + }); + } }); } @@ -343,6 +366,17 @@ class _EditProfilePageState extends State { data ..name = _textController.text ..coins = data.coins! - 6; + accountService.name.value = _textController.text; + try { + UserInfoData userInfo = GStorage.userInfo.get('userInfoCache') + ..uname = _textController.text; + GStorage.userInfo.put('userInfoCache', userInfo); + } catch (_) {} + try { + Get.find().userInfo + ..value.uname = _textController.text + ..refresh(); + } catch (_) {} } else if (type == ProfileType.sign) { data.sign = _textController.text; } else if (type == ProfileType.birthday) { @@ -351,7 +385,9 @@ class _EditProfilePageState extends State { data.sex = datum; } SmartDialog.showToast('修改成功'); - setState(() {}); + if (mounted) { + setState(() {}); + } if (type == ProfileType.uname || type == ProfileType.sign) { Get.back(); } @@ -469,9 +505,9 @@ class _EditProfilePageState extends State { ) .then((res) { if (res.data['code'] == 0) { - _loadingState.data.face = res.data['data']; SmartDialog.showToast('修改成功'); - setState(() {}); + Future.delayed(const Duration(milliseconds: 500)) + .whenComplete(_getInfo); } else { SmartDialog.showToast(res.data['message']); } diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index f63d7b3d0..549f0be9a 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -3,6 +3,7 @@ import 'package:PiliPlus/models/common/account_type.dart'; import 'package:PiliPlus/models/common/theme/theme_type.dart'; import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/models/user/stat.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/login_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; @@ -18,7 +19,7 @@ class MineController extends GetxController { // 用户状态 动态、关注、粉丝 Rx userStat = UserStat().obs; - RxBool isLogin = false.obs; + AccountService accountService = Get.find(); Rx themeType = ThemeType.system.obs; Box get setting => GStorage.setting; @@ -31,16 +32,14 @@ class MineController extends GetxController { @override void onInit() { super.onInit(); - - dynamic userInfoCache = GStorage.userInfo.get('userInfoCache'); + UserInfoData? userInfoCache = GStorage.userInfo.get('userInfoCache'); if (userInfoCache != null) { userInfo.value = userInfoCache; - isLogin.value = true; } } void onLogin([bool longPress = false]) { - if (!isLogin.value || longPress) { + if (!accountService.isLogin.value || longPress) { Get.toNamed('/loginPage', preventDuplicates: false); } else { int mid = userInfo.value.mid!; @@ -51,15 +50,20 @@ class MineController extends GetxController { } Future queryUserInfo() async { - if (!isLogin.value) { + if (!accountService.isLogin.value) { return; } var res = await UserHttp.userInfo(); if (res['status']) { - if (res['data'].isLogin) { - userInfo.value = res['data']; - GStorage.userInfo.put('userInfoCache', res['data']); - isLogin.value = true; + UserInfoData data = res['data']; + if (data.isLogin == true) { + userInfo.value = data; + GStorage.userInfo.put('userInfoCache', data); + accountService + ..mid = data.mid! + ..name.value = data.uname! + ..face.value = data.face! + ..isLogin.value = true; } else { LoginUtils.onLogoutMain(); return; @@ -203,7 +207,7 @@ class MineController extends GetxController { } void pushFollow() { - if (!isLogin.value) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -211,7 +215,7 @@ class MineController extends GetxController { } void pushFans() { - if (!isLogin.value) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -219,7 +223,7 @@ class MineController extends GetxController { } void pushDynamic() { - if (!isLogin.value) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/pgc/controller.dart b/lib/pages/pgc/controller.dart index 292df0c73..3e7d66ca0 100644 --- a/lib/pages/pgc/controller.dart +++ b/lib/pages/pgc/controller.dart @@ -7,6 +7,7 @@ import 'package:PiliPlus/models_new/fav/fav_pgc/list.dart'; import 'package:PiliPlus/models_new/pgc/pgc_index_result/list.dart'; import 'package:PiliPlus/models_new/pgc/pgc_timeline/result.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter/material.dart'; @@ -17,30 +18,28 @@ class PgcController PgcController({required this.tabType}); final HomeTabType tabType; - int? mid; - late final RxBool isLogin; late final showPgcTimeline = tabType == HomeTabType.bangumi && GStorage.showPgcTimeline; + AccountService accountService = Get.find(); + @override void onInit() { super.onInit(); - mid = Accounts.main.mid; - isLogin = (mid != 0).obs; queryData(); queryPgcFollow(); if (showPgcTimeline) { queryPgcTimeline(); } - if (isLogin.value) { + if (accountService.isLogin.value) { followController = ScrollController(); } } @override Future onRefresh() { - if (isLogin.value) { + if (accountService.isLogin.value) { followPage = 1; followEnd = false; } @@ -71,12 +70,14 @@ class PgcController // 我的订阅 Future queryPgcFollow([bool isRefresh = true]) async { - if (!isLogin.value || followLoading || (!isRefresh && followEnd)) { + if (!accountService.isLogin.value || + followLoading || + (!isRefresh && followEnd)) { return; } followLoading = true; var res = await FavHttp.favPgc( - mid: mid, + mid: accountService.mid, type: tabType == HomeTabType.bangumi ? 1 : 2, pn: followPage, ); diff --git a/lib/pages/pgc/view.dart b/lib/pages/pgc/view.dart index 1bf673b0d..19feb55cd 100644 --- a/lib/pages/pgc/view.dart +++ b/lib/pages/pgc/view.dart @@ -337,7 +337,7 @@ class _PgcPageState extends CommonPageState Widget _buildFollow(ThemeData theme) => SliverToBoxAdapter( child: Obx( - () => controller.isLogin.value + () => controller.accountService.isLogin.value ? Column( children: [ _buildFollowTitle(theme), @@ -377,7 +377,7 @@ class _PgcPageState extends CommonPageState ), ), Obx( - () => controller.isLogin.value + () => controller.accountService.isLogin.value ? Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: GestureDetector( diff --git a/lib/pages/subscription/controller.dart b/lib/pages/subscription/controller.dart index f4c0c6f61..da9970050 100644 --- a/lib/pages/subscription/controller.dart +++ b/lib/pages/subscription/controller.dart @@ -3,25 +3,24 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/models_new/sub/sub/list.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; class SubController extends CommonListController?, SubItemModel> { - dynamic mid; + AccountService accountService = Get.find(); @override void onInit() { super.onInit(); - mid = Accounts.main.mid; queryData(); } @override Future queryData([bool isRefresh = true]) { - if (mid == 0) { + if (!accountService.isLogin.value) { loadingState.value = const Error('账号未登录'); return Future.value(); } @@ -69,6 +68,6 @@ class SubController UserHttp.userSubFolder( pn: page, ps: 20, - mid: mid, + mid: accountService.mid, ); } diff --git a/lib/pages/video/introduction/pgc/controller.dart b/lib/pages/video/introduction/pgc/controller.dart index 72c399b9e..9aac9a0cb 100644 --- a/lib/pages/video/introduction/pgc/controller.dart +++ b/lib/pages/video/introduction/pgc/controller.dart @@ -20,6 +20,7 @@ import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; import 'package:PiliPlus/pages/video/pay_coins/view.dart'; import 'package:PiliPlus/pages/video/reply/controller.dart'; import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/page_utils.dart'; @@ -60,8 +61,7 @@ class PgcIntroController extends GetxController { List? favIds; Rx favFolderData = FavVideoData().obs; - bool isLogin = Accounts.main.isLogin; - int mid = Accounts.main.mid; + AccountService accountService = Get.find(); late final enableQuickFav = GStorage.setting.get(SettingBoxKey.enableQuickFav, defaultValue: false); @@ -69,7 +69,7 @@ class PgcIntroController extends GetxController { @override void onInit() { super.onInit(); - if (isLogin) { + if (accountService.isLogin.value) { if (seasonId != null) { queryIsFollowed(); } @@ -134,7 +134,7 @@ class PgcIntroController extends GetxController { // 投币 void actionCoinVideo() { - if (!isLogin) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -388,7 +388,7 @@ class PgcIntroController extends GetxController { } catch (_) {} } - if (isLogin) { + if (accountService.isLogin.value) { queryPgcLikeCoinFav(); } @@ -434,7 +434,7 @@ class PgcIntroController extends GetxController { Future queryVideoInFolder() async { favIds = null; var result = await FavHttp.videoInFolder( - mid: mid, + mid: accountService.mid, rid: epId, // pgc type: 24, // pgc ); @@ -508,7 +508,7 @@ class PgcIntroController extends GetxController { // 一键三连 Future actionOneThree() async { feedBack(); - if (!isLogin) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -562,7 +562,7 @@ class PgcIntroController extends GetxController { // 收藏 void showFavBottomSheet(BuildContext context, {type = 'tap'}) { - if (!isLogin) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart index 5f57878d7..32d3a7b87 100644 --- a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart +++ b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/new_ep.dart'; import 'package:PiliPlus/pages/video/controller.dart'; @@ -34,9 +35,8 @@ class PgcPanel extends StatefulWidget { class _PgcPanelState extends State { late int currentIndex; final ScrollController listViewScrollCtr = ScrollController(); - dynamic userInfo; // 默认未开通 - int vipStatus = 0; + late int vipStatus; late int cid; late final VideoDetailController videoDetailCtr; StreamSubscription? _listener; @@ -47,10 +47,10 @@ class _PgcPanelState extends State { cid = widget.cid!; currentIndex = widget.pages.indexWhere((e) => e.cid == cid); scrollToIndex(); - userInfo = GStorage.userInfo.get('userInfoCache'); - if (userInfo != null) { - vipStatus = userInfo.vipStatus; - } + + UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + vipStatus = userInfo?.vipStatus ?? 0; + videoDetailCtr = Get.find(tag: widget.heroTag); _listener = videoDetailCtr.cid.listen((int p0) { diff --git a/lib/pages/video/introduction/ugc/controller.dart b/lib/pages/video/introduction/ugc/controller.dart index 97f0bee42..be41719cd 100644 --- a/lib/pages/video/introduction/ugc/controller.dart +++ b/lib/pages/video/introduction/ugc/controller.dart @@ -28,6 +28,7 @@ import 'package:PiliPlus/pages/video/pay_coins/view.dart'; import 'package:PiliPlus/pages/video/related/controller.dart'; import 'package:PiliPlus/pages/video/reply/controller.dart'; import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/services/service_locator.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/feed_back.dart'; @@ -77,14 +78,12 @@ class VideoIntroController extends GetxController { RxBool hasFav = false.obs; // 是否稍后再看 RxBool hasLater = false.obs; - bool isLogin = false; Rx favFolderData = FavVideoData().obs; Set? favIds; // 关注状态 默认未关注 RxMap followStatus = {}.obs; RxInt lastPlayCid = 0.obs; - dynamic userInfo; // 同时观看 bool isShowOnlineTotal = false; @@ -103,10 +102,11 @@ class VideoIntroController extends GetxController { late final enableQuickFav = GStorage.setting.get(SettingBoxKey.enableQuickFav, defaultValue: false); + AccountService accountService = Get.find(); + @override void onInit() { super.onInit(); - userInfo = GStorage.userInfo.get('userInfoCache'); try { if (heroTag.isEmpty) { heroTag = Get.arguments['heroTag']; @@ -139,7 +139,6 @@ class VideoIntroController extends GetxController { videoItem['owner'] = keys.contains('owner') ? args.owner : null; } } - isLogin = userInfo != null; lastPlayCid.value = int.parse(Get.parameters['cid']!); isShowOnlineTotal = GStorage.setting .get(SettingBoxKey.enableOnlineTotal, defaultValue: false); @@ -194,7 +193,7 @@ class VideoIntroController extends GetxController { "${result['code']} ${result['msg']} ${result['data']}"); } queryVideoIntroData.addAll(result); - if (isLogin) { + if (accountService.isLogin.value) { queryAllStatus(); queryFollowStatus(); } @@ -252,7 +251,7 @@ class VideoIntroController extends GetxController { // 一键三连 Future actionOneThree() async { feedBack(); - if (userInfo == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -278,7 +277,7 @@ class VideoIntroController extends GetxController { // (取消)点赞 Future actionLikeVideo() async { - if (userInfo == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -303,7 +302,7 @@ class VideoIntroController extends GetxController { } Future actionDislikeVideo() async { - if (userInfo == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -357,7 +356,7 @@ class VideoIntroController extends GetxController { // 投币 Future actionCoinVideo() async { - if (userInfo == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -550,7 +549,9 @@ class VideoIntroController extends GetxController { Future queryVideoInFolder() async { favIds = null; var result = await FavHttp.videoInFolder( - mid: userInfo.mid, rid: IdUtils.bv2av(bvid)); + mid: accountService.mid, + rid: IdUtils.bv2av(bvid), + ); if (result['status']) { favFolderData.value = result['data']; favIds = favFolderData.value.list @@ -586,7 +587,7 @@ class VideoIntroController extends GetxController { // 关注/取关up Future actionRelationMod(BuildContext context) async { - if (userInfo == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -927,7 +928,7 @@ class VideoIntroController extends GetxController { // 收藏 void showFavBottomSheet(BuildContext context, {type = 'tap'}) { - if (userInfo == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/video/member/view.dart b/lib/pages/video/member/view.dart index 7bfead262..e0ec57d6f 100644 --- a/lib/pages/video/member/view.dart +++ b/lib/pages/video/member/view.dart @@ -14,11 +14,11 @@ import 'package:PiliPlus/pages/member_video/widgets/video_card_h_member_video.da import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; import 'package:PiliPlus/pages/video/member/controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/grid.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/request_utils.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -42,7 +42,7 @@ class HorizontalMemberPage extends StatefulWidget { class _HorizontalMemberPageState extends State { late final HorizontalMemberPageController _controller; - int? _ownerMid; + AccountService accountService = Get.find(); dynamic _bvid; @override @@ -56,7 +56,6 @@ class _HorizontalMemberPageState extends State { tag: widget.videoDetailController.heroTag, ); _bvid = widget.videoDetailController.bvid; - _ownerMid = Accounts.main.mid; } @override @@ -320,10 +319,10 @@ class _HorizontalMemberPageState extends State { visualDensity: const VisualDensity(vertical: -2), ), onPressed: () { - if (widget.mid == _ownerMid) { + if (widget.mid == accountService.mid) { Get.toNamed('/editProfile'); } else { - if (_ownerMid == null) { + if (!accountService.isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -340,7 +339,7 @@ class _HorizontalMemberPageState extends State { } }, child: Text( - widget.mid == _ownerMid + widget.mid == accountService.mid ? '编辑资料' : memberInfoModel.isFollowed == true ? '已关注' diff --git a/lib/pages/video/send_danmaku/view.dart b/lib/pages/video/send_danmaku/view.dart index b372210e0..d63ac68fa 100644 --- a/lib/pages/video/send_danmaku/view.dart +++ b/lib/pages/video/send_danmaku/view.dart @@ -4,6 +4,7 @@ import 'package:PiliPlus/common/widgets/button/icon_button.dart'; import 'package:PiliPlus/http/danmaku.dart'; import 'package:PiliPlus/main.dart'; import 'package:PiliPlus/models/common/publish_panel_type.dart'; +import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/pages/common/common_publish_page.dart'; import 'package:PiliPlus/pages/setting/slide_color_picker.dart'; import 'package:PiliPlus/utils/storage.dart'; @@ -71,12 +72,10 @@ class _SendDanmakuPanelState extends CommonPublishPageState { _mode = (widget.dmConfig?.mode ?? 1).obs; _fontsize = (widget.dmConfig?.fontsize ?? 25).obs; _color = (widget.dmConfig?.color ?? Colors.white).obs; - try { - final userInfo = GStorage.userInfo.get('userInfoCache'); - if (userInfo?.vipStatus == 1) { - _colorList.add(Colors.transparent); - } - } catch (_) {} + UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + if (userInfo?.vipStatus == 1) { + _colorList.add(Colors.transparent); + } } @override diff --git a/lib/pages/whisper_detail/controller.dart b/lib/pages/whisper_detail/controller.dart index 4378fde77..d2279ed56 100644 --- a/lib/pages/whisper_detail/controller.dart +++ b/lib/pages/whisper_detail/controller.dart @@ -8,16 +8,16 @@ import 'package:PiliPlus/grpc/im.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/msg.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/feed_back.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:fixnum/fixnum.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; class WhisperDetailController extends CommonListController { - late final ownerMid = Accounts.main.mid; + AccountService accountService = Get.find(); final int talkerId = Get.arguments['talkerId']; final String name = Get.arguments['name']; @@ -73,12 +73,12 @@ class WhisperDetailController extends CommonListController { }) async { feedBack(); SmartDialog.dismiss(); - if (ownerMid == 0) { + if (!accountService.isLogin.value) { SmartDialog.showToast('请先登录'); return; } var result = await ImGrpc.sendMsg( - senderUid: ownerMid, + senderUid: accountService.mid, receiverId: mid!, content: msgType == 5 ? message : jsonEncode(picMsg ?? {"content": message}), diff --git a/lib/pages/whisper_detail/view.dart b/lib/pages/whisper_detail/view.dart index 3fd4a2950..407fbdac5 100644 --- a/lib/pages/whisper_detail/view.dart +++ b/lib/pages/whisper_detail/view.dart @@ -162,10 +162,10 @@ class _WhisperDetailPageState return ChatItem( item: item, eInfos: _whisperDetailController.eInfos, - onLongPress: - item.senderUid == _whisperDetailController.ownerMid - ? () => onLongPress(index, item) - : null, + onLongPress: item.senderUid.toInt() == + _whisperDetailController.accountService.mid + ? () => onLongPress(index, item) + : null, ); }, separatorBuilder: (context, index) => const SizedBox(height: 12), diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 2f67f75f7..787c806ed 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -257,8 +257,6 @@ class PlPlayerController { } } - late final isLogin = Accounts.main.isLogin; - /// 弹幕权重 int danmakuWeight = 0; late RuleFilter filters; diff --git a/lib/services/account_service.dart b/lib/services/account_service.dart new file mode 100644 index 000000000..ee6385d75 --- /dev/null +++ b/lib/services/account_service.dart @@ -0,0 +1,20 @@ +import 'package:PiliPlus/models/user/info.dart'; +import 'package:PiliPlus/utils/storage.dart' show GStorage; +import 'package:get/get.dart'; + +class AccountService extends GetxService { + late int mid; + late final RxString name; + late final RxString face; + late final RxBool isLogin; + + @override + void onInit() { + super.onInit(); + UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + mid = userInfo?.mid ?? 0; + name = (userInfo?.uname ?? '').obs; + face = (userInfo?.face ?? '').obs; + isLogin = (userInfo != null).obs; + } +} diff --git a/lib/utils/login_utils.dart b/lib/utils/login_utils.dart index 0afa836e7..437052297 100644 --- a/lib/utils/login_utils.dart +++ b/lib/utils/login_utils.dart @@ -9,12 +9,11 @@ import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/models/user/stat.dart'; import 'package:PiliPlus/pages/dynamics/controller.dart'; import 'package:PiliPlus/pages/dynamics_tab/controller.dart'; -import 'package:PiliPlus/pages/home/controller.dart'; import 'package:PiliPlus/pages/live/controller.dart'; -import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/pages/media/controller.dart'; import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/pages/pgc/controller.dart'; +import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart' as web; @@ -45,61 +44,50 @@ class LoginUtils { SmartDialog.showToast('设置登录态失败,$e'); } final result = await UserHttp.userInfo(); - if (result['status'] && result['data']?.isLogin == true) { + if (result['status']) { final UserInfoData data = result['data']; - SmartDialog.showToast('main登录成功'); - await GStorage.userInfo.put('userInfoCache', data); - try { - Get.find() - ..isLogin.value = true - ..queryUserInfo(); - } catch (_) {} + if (data.isLogin == true) { + Get.find() + ..mid = data.mid! + ..name.value = data.uname! + ..face.value = data.face! + ..isLogin.value = true; - try { - Get.find() - ..isLogin.value = true - ..userFace.value = data.face!; - } catch (_) {} + SmartDialog.showToast('main登录成功'); + await GStorage.userInfo.put('userInfoCache', data); - try { - Get.find() - ..isLogin.value = true - ..ownerMid = data.mid - ..face = data.face - ..onRefresh(); - } catch (_) {} - - for (var item in DynamicsTabType.values) { try { - Get.find(tag: item.name).onRefresh(); + Get.find().queryUserInfo(); + } catch (_) {} + + try { + Get.find().onRefresh(); + } catch (_) {} + + for (var item in DynamicsTabType.values) { + try { + Get.find(tag: item.name).onRefresh(); + } catch (_) {} + } + + try { + Get.find().onRefresh(); + } catch (_) {} + + try { + Get.find().onRefresh(); + } catch (_) {} + + try { + Get.find(tag: HomeTabType.bangumi.name) + .queryPgcFollow(); + } catch (_) {} + + try { + Get.find(tag: HomeTabType.cinema.name) + .queryPgcFollow(); } catch (_) {} } - - try { - Get.find() - ..mid = data.mid - ..onRefresh(); - } catch (_) {} - - try { - Get.find() - ..isLogin.value = true - ..onRefresh(); - } catch (_) {} - - try { - Get.find(tag: HomeTabType.bangumi.name) - ..isLogin.value = true - ..mid = data.mid - ..queryPgcFollow(); - } catch (_) {} - - try { - Get.find(tag: HomeTabType.cinema.name) - ..isLogin.value = true - ..mid = data.mid - ..queryPgcFollow(); - } catch (_) {} } else { // 获取用户信息失败 await Accounts.deleteAll({account}); @@ -110,6 +98,12 @@ class LoginUtils { } static Future onLogoutMain() async { + Get.find() + ..mid = 0 + ..name.value = '' + ..face.value = '' + ..isLogin.value = false; + GrpcRepo.updateHeaders(null); await Future.wait([ @@ -117,41 +111,23 @@ class LoginUtils { GStorage.userInfo.delete('userInfoCache'), ]); - try { - Get.find().isLogin.value = false; - } catch (_) {} - try { Get.find() ..userInfo.value = UserInfoData() - ..userStat.value = UserStat() - ..isLogin.value = false; + ..userStat.value = UserStat(); // MineController.anonymity.value = false; } catch (_) {} try { - Get.find() - ..isLogin.value = false - ..userFace.value = ''; + Get.find().onRefresh(); } catch (_) {} try { - Get.find() - ..ownerMid = null - ..isLogin.value = false - ..onRefresh(); + Get.find().loadingState.value = LoadingState.loading(); } catch (_) {} try { - Get.find() - ..mid = null - ..loadingState.value = LoadingState.loading(); - } catch (_) {} - - try { - Get.find() - ..isLogin.value = false - ..onRefresh(); + Get.find().onRefresh(); } catch (_) {} for (var item in DynamicsTabType.values) { @@ -161,17 +137,13 @@ class LoginUtils { } try { - Get.find(tag: HomeTabType.bangumi.name) - ..mid = null - ..isLogin.value = false - ..followState.value = LoadingState.loading(); + Get.find(tag: HomeTabType.bangumi.name).followState.value = + LoadingState.loading(); } catch (_) {} try { - Get.find(tag: HomeTabType.cinema.name) - ..mid = null - ..isLogin.value = false - ..followState.value = LoadingState.loading(); + Get.find(tag: HomeTabType.cinema.name).followState.value = + LoadingState.loading(); } catch (_) {} }