From e06a3d8f22d172b134403c31c792d8f543f2ad9b Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Wed, 8 Jan 2025 13:23:11 +0800 Subject: [PATCH] opt: login/logout Signed-off-by: bggRGjQaUbCoE --- lib/models/dynamics/up.dart | 1 + lib/pages/about/index.dart | 16 ++-- lib/pages/bangumi/controller.dart | 4 +- .../bangumi/introduction/controller.dart | 10 +-- lib/pages/bangumi/view.dart | 2 +- lib/pages/dynamics/controller.dart | 53 +++++++------ lib/pages/dynamics/view.dart | 77 +++++-------------- lib/pages/dynamics/widgets/up_panel.dart | 45 +++++------ lib/pages/home/controller.dart | 12 +-- lib/pages/home/view.dart | 4 +- lib/pages/main/view.dart | 4 +- lib/pages/mine/controller.dart | 43 +++-------- lib/pages/mine/view.dart | 50 ++---------- lib/pages/setting/view.dart | 2 +- .../video/detail/introduction/controller.dart | 6 +- lib/utils/login.dart | 56 +++++++++----- lib/utils/utils.dart | 26 +++++-- 17 files changed, 174 insertions(+), 237 deletions(-) diff --git a/lib/models/dynamics/up.dart b/lib/models/dynamics/up.dart index 3f620070..832e3300 100644 --- a/lib/models/dynamics/up.dart +++ b/lib/models/dynamics/up.dart @@ -4,6 +4,7 @@ class FollowUpModel { this.upList, }); + String? errMsg; LiveUsers? liveUsers; List? upList; diff --git a/lib/pages/about/index.dart b/lib/pages/about/index.dart index 3e804f5a..b81b30e6 100644 --- a/lib/pages/about/index.dart +++ b/lib/pages/about/index.dart @@ -241,14 +241,14 @@ Commit Hash: ${BuildConfig.commitHash}''', 'cookies': cookies, }); Utils.copyText('$res'); - if (context.mounted) { - showDialog( - context: context, - builder: (context) => AlertDialog( - content: SelectableText('$res'), - ), - ); - } + // if (context.mounted) { + // showDialog( + // context: context, + // builder: (context) => AlertDialog( + // content: SelectableText('$res'), + // ), + // ); + // } }, ), ListTile( diff --git a/lib/pages/bangumi/controller.dart b/lib/pages/bangumi/controller.dart index 60970c21..cda130be 100644 --- a/lib/pages/bangumi/controller.dart +++ b/lib/pages/bangumi/controller.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/utils/storage.dart'; class BangumiController extends CommonController { bool isLoadingMore = true; - RxBool userLogin = false.obs; + RxBool isLogin = false.obs; late int mid; dynamic userInfo; @@ -19,7 +19,7 @@ class BangumiController extends CommonController { if (userInfo != null) { mid = userInfo.mid; } - userLogin.value = userInfo != null; + isLogin.value = userInfo != null; queryData(); queryBangumiFollow(); diff --git a/lib/pages/bangumi/introduction/controller.dart b/lib/pages/bangumi/introduction/controller.dart index 3bd00965..b4beb07a 100644 --- a/lib/pages/bangumi/introduction/controller.dart +++ b/lib/pages/bangumi/introduction/controller.dart @@ -51,7 +51,7 @@ class BangumiIntroController extends CommonController { // 是否收藏 RxBool hasFav = false.obs; dynamic videoTags; - bool userLogin = false; + bool isLogin = false; Rx favFolderData = FavFolderData().obs; List addMediaIdsNew = []; List delMediaIdsNew = []; @@ -82,9 +82,9 @@ class BangumiIntroController extends CommonController { } } userInfo = GStorage.userInfo.get('userInfoCache'); - userLogin = userInfo != null; + isLogin = userInfo != null; - if (userLogin && epId != null) { + if (isLogin && epId != null) { // // 获取点赞状态 // queryHasLikeVideo(); // // 获取投币状态 @@ -96,7 +96,7 @@ class BangumiIntroController extends CommonController { queryData(); - if (userLogin && seasonId != null) { + if (isLogin && seasonId != null) { queryIsFollowed(); } } @@ -404,7 +404,7 @@ class BangumiIntroController extends CommonController { } catch (_) {} } - if (userLogin) { + if (isLogin) { queryBangumiLikeCoinFav(); } } diff --git a/lib/pages/bangumi/view.dart b/lib/pages/bangumi/view.dart index 53a89d51..0361718d 100644 --- a/lib/pages/bangumi/view.dart +++ b/lib/pages/bangumi/view.dart @@ -74,7 +74,7 @@ class _BangumiPageState extends State SliverToBoxAdapter( child: Obx( () => Visibility( - visible: _bangumiController.userLogin.value, + visible: _bangumiController.isLogin.value, child: Column( children: [ Padding( diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 3891afe3..2a00dfa5 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -30,8 +30,9 @@ class DynamicsController extends GetxController RxList tempBannedList = [].obs; late List tabsPageList; RxInt initialValue = 0.obs; - RxBool userLogin = false.obs; - dynamic userInfo; + RxBool isLogin = false.obs; + dynamic ownerMid; + dynamic face; RxBool isLoadingDynamic = false.obs; List hasUpdatedUps = []; List allFollowedUps = []; @@ -40,10 +41,13 @@ class DynamicsController extends GetxController @override void onInit() { - userInfo = GStorage.userInfo.get('userInfoCache'); - userLogin.value = userInfo != null; super.onInit(); + dynamic userInfo = GStorage.userInfo.get('userInfoCache'); + ownerMid = userInfo?.mid; + face = userInfo?.face; + isLogin.value = userInfo != null; + tabController = TabController( length: tabsConfig.length, vsync: this, @@ -52,9 +56,7 @@ class DynamicsController extends GetxController ); tabsPageList = tabsConfig.map((e) => DynamicsTabPage(dynamicsType: e['tag'])).toList(); - } - void refreshNotifier() { queryFollowUp(); } @@ -223,7 +225,7 @@ class DynamicsController extends GetxController return; } var res = await FollowHttp.followings( - vmid: userInfo.mid, + vmid: ownerMid, pn: allFollowedUpsPage, ps: 50, orderType: 'attention', @@ -246,9 +248,11 @@ class DynamicsController extends GetxController } Future queryFollowUp({type = 'init'}) async { - if (!userLogin.value) { - return {'status': false, 'msg': '账号未登录'}; + if (!isLogin.value) { + upData.value.errMsg = '账号未登录'; + upData.refresh(); } + upData.value.errMsg = null; if (type == 'init') { upData.value.upList = []; upData.value.liveUsers = LiveUsers(); @@ -258,13 +262,16 @@ class DynamicsController extends GetxController allFollowedUpsPage = 1; Future f1 = DynamicsHttp.followUp(); Future f2 = FollowHttp.followings( - vmid: userInfo.mid, - pn: allFollowedUpsPage, - ps: 50, - orderType: 'attention'); + vmid: ownerMid, + pn: allFollowedUpsPage, + ps: 50, + orderType: 'attention', + ); List ress = await Future.wait([f1, f2]); if (!ress[0]['status']) { SmartDialog.showToast("获取关注动态失败:${ress[0]['msg']}"); + upData.value.errMsg = ress[0]['msg']; + upData.refresh(); } else { upData.value.liveUsers = ress[0]['data'].liveUsers; hasUpdatedUps = ress[0]['data'].upList!; @@ -286,16 +293,18 @@ class DynamicsController extends GetxController } upData.value.upList = allFollowedUpsTotal > 0 ? allFollowedUps : hasUpdatedUps; - return ress[0]; - } - var res = await DynamicsHttp.followUp(); - if (res['status']) { - upData.value = res['data']; - if (upData.value.upList!.isEmpty) { - mid.value = -1; + } else { + var res = await DynamicsHttp.followUp(); + if (res['status']) { + upData.value = res['data']; + if (upData.value.upList!.isEmpty) { + mid.value = -1; + } + } else { + upData.value.errMsg = res['msg']; + upData.refresh(); } } - return res; } onSelectUp(mid) async { @@ -308,8 +317,8 @@ class DynamicsController extends GetxController } onRefresh() async { + queryFollowUp(); await Future.wait([ - queryFollowUp(), Get.find( tag: tabsConfig[tabController.index]['tag']) .onRefresh() diff --git a/lib/pages/dynamics/view.dart b/lib/pages/dynamics/view.dart index b900be3b..e247ba90 100644 --- a/lib/pages/dynamics/view.dart +++ b/lib/pages/dynamics/view.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:PiliPlus/common/widgets/http_error.dart'; import 'package:PiliPlus/http/msg.dart'; import 'package:PiliPlus/models/common/dynamics_type.dart'; import 'package:PiliPlus/models/common/up_panel_position.dart'; @@ -15,7 +14,6 @@ import 'package:PiliPlus/utils/storage.dart'; import 'package:image_picker/image_picker.dart'; import 'package:intl/intl.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; -import 'package:nil/nil.dart'; import 'controller.dart'; import 'widgets/up_panel.dart'; @@ -42,9 +40,7 @@ class DynamicsPage extends StatefulWidget { class _DynamicsPageState extends State with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin { final DynamicsController _dynamicsController = Get.put(DynamicsController()); - late Future _futureBuilderFutureUp; late UpPanelPosition upPanelPosition; - StreamSubscription? _listener; @override bool get wantKeepAlive => true; @@ -64,7 +60,7 @@ class _DynamicsPageState extends State }), ), onPressed: () { - if (GStorage.isLogin) { + if (_dynamicsController.isLogin.value) { showModalBottomSheet( context: context, useSafeArea: true, @@ -85,24 +81,6 @@ class _DynamicsPageState extends State @override void initState() { super.initState(); - _futureBuilderFutureUp = _dynamicsController.queryFollowUp(); - // _dynamicsController.tabController = - // TabController(vsync: this, length: DynamicsType.values.length); - // ..addListener(() { - // if (!_dynamicsController.tabController.indexIsChanging) { - // // if (!mounted) return; - // // debugPrint('indexChanging: ${_dynamicsController.tabController.index}'); - // _dynamicsController - // .onSelectType(_dynamicsController.tabController.index); - // } - // }); - _listener = _dynamicsController.userLogin.listen((status) { - if (mounted) { - setState(() { - _futureBuilderFutureUp = _dynamicsController.queryFollowUp(); - }); - } - }); upPanelPosition = UpPanelPosition.values[GStorage.setting.get( SettingBoxKey.upPanelPosition, defaultValue: UpPanelPosition.leftFixed.index)]; @@ -123,7 +101,6 @@ class _DynamicsPageState extends State @override void dispose() { - _listener?.cancel(); _dynamicsController.tabController.removeListener(() {}); _dynamicsController.scrollController.removeListener(() {}); super.dispose(); @@ -136,41 +113,25 @@ class _DynamicsPageState extends State ? Theme.of(context).colorScheme.surface : Colors.transparent, width: 64, - child: FutureBuilder( - future: _futureBuilderFutureUp, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - if (snapshot.data == null) { - return nil; - } - // TODO: refactor - if (snapshot.data is! Map) { - return HttpError( - isSliver: false, - callback: () => setState(() { - _futureBuilderFutureUp = _dynamicsController.queryFollowUp(); - }), - ); - } - Map data = snapshot.data; - if (data['status']) { - return Obx(() => UpPanel(_dynamicsController.upData.value, - _dynamicsController.scrollController)); - } else { - return Center( - child: IconButton( - icon: Icon(Icons.refresh), - onPressed: () { - setState(() { - _futureBuilderFutureUp = - _dynamicsController.queryFollowUp(); - }); - }, - ), - ); - } + child: Obx( + () { + if (_dynamicsController.upData.value.upList == null && + _dynamicsController.upData.value.liveUsers == null) { + return const SizedBox.shrink(); + } else if (_dynamicsController.upData.value.errMsg != null) { + return Center( + child: IconButton( + icon: Icon(Icons.refresh), + onPressed: () { + _dynamicsController.queryFollowUp(); + }, + ), + ); } else { - return nil; + return UpPanel( + key: ValueKey(_dynamicsController.upData.value), + dynamicsController: _dynamicsController, + ); } }, ), diff --git a/lib/pages/dynamics/widgets/up_panel.dart b/lib/pages/dynamics/widgets/up_panel.dart index 096400a0..186d01f6 100644 --- a/lib/pages/dynamics/widgets/up_panel.dart +++ b/lib/pages/dynamics/widgets/up_panel.dart @@ -1,17 +1,19 @@ +import 'package:PiliPlus/pages/dynamics/controller.dart'; +import 'package:PiliPlus/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPlus/common/widgets/network_img_layer.dart'; import 'package:PiliPlus/models/dynamics/up.dart'; import 'package:PiliPlus/models/live/item.dart'; -import 'package:PiliPlus/pages/dynamics/controller.dart'; import 'package:PiliPlus/utils/feed_back.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; class UpPanel extends StatefulWidget { - final FollowUpModel? upData; - final ScrollController scrollController; - const UpPanel(this.upData, this.scrollController, {super.key}); + final DynamicsController dynamicsController; + const UpPanel({ + required this.dynamicsController, + super.key, + }); @override State createState() => _UpPanelState(); @@ -19,27 +21,21 @@ class UpPanel extends StatefulWidget { class _UpPanelState extends State { int currentMid = -1; - List upList = []; - List liveList = []; - dynamic userInfo; + List get upList => + widget.dynamicsController.upData.value.upList ?? []; + List get liveList => + widget.dynamicsController.upData.value.liveUsers?.items ?? + []; bool _showLiveItems = false; - late DynamicsController dynamicsController; - - @override - void initState() { - super.initState(); - userInfo = GStorage.userInfo.get('userInfoCache'); - dynamicsController = Get.find(); - } @override Widget build(BuildContext context) { - upList = widget.upData!.upList!; - liveList = widget.upData!.liveUsers?.items ?? []; - // return const SizedBox(); + if (widget.dynamicsController.isLogin.value.not) { + return const SizedBox.shrink(); + } return CustomScrollView( physics: const AlwaysScrollableScrollPhysics(), - controller: widget.scrollController, + controller: widget.dynamicsController.scrollController, slivers: [ SliverToBoxAdapter( child: SizedBox( @@ -93,9 +89,9 @@ class _UpPanelState extends State { upItemBuild(UpItem(face: '', uname: '全部动态', mid: -1), 0), upItemBuild( UpItem( - face: userInfo?.face, uname: '我', - mid: userInfo?.mid, + face: widget.dynamicsController.face, + mid: widget.dynamicsController.ownerMid, ), 1, ), @@ -120,8 +116,9 @@ class _UpPanelState extends State { if (data.type == 'up') { currentMid = data.mid; // dynamicsController.mid.value = data.mid; - dynamicsController.upInfo.value = data; - dynamicsController.onSelectUp(data.mid); + widget.dynamicsController + ..upInfo.value = data + ..onSelectUp(data.mid); // int liveLen = liveList.length; // int upLen = upList.length; // double itemWidth = contentWidth + itemPadding.horizontal; diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index 1421702a..6b60f00b 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -14,7 +14,7 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { late TabController tabController; late List tabsCtrList; late List tabsPageList; - RxBool userLogin = false.obs; + RxBool isLogin = false.obs; RxString userFace = ''.obs; dynamic userInfo; late final StreamController searchBarStream = @@ -32,7 +32,7 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { void onInit() { super.onInit(); userInfo = GStorage.userInfo.get('userInfoCache'); - userLogin.value = userInfo != null; + isLogin.value = userInfo != null; userFace.value = userInfo != null ? userInfo.face : ''; hideSearchBar = GStorage.setting.get(SettingBoxKey.hideSearchBar, defaultValue: true); @@ -64,14 +64,6 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { } catch (_) {} } - // 更新登录状态 - Future updateLoginStatus(val) async { - userInfo = await GStorage.userInfo.get('userInfoCache'); - userLogin.value = val ?? false; - if (val) return; - userFace.value = userInfo != null ? userInfo.face : ''; - } - void setTabConfig() async { defaultTabs = [...tabsConfig]; tabbarSort = GStorage.setting diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 84465277..05eb38bd 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -89,7 +89,7 @@ class _HomePageState extends State searchBar, const SizedBox(width: 4), Obx( - () => _homeController.userLogin.value + () => _homeController.isLogin.value ? Stack( clipBehavior: Clip.none, alignment: Alignment.center, @@ -134,7 +134,7 @@ class _HomePageState extends State Semantics( label: "我的", child: Obx( - () => _homeController.userLogin.value + () => _homeController.isLogin.value ? Stack( clipBehavior: Clip.none, children: [ diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index a99da5f9..54e13b53 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -374,7 +374,7 @@ class _MainAppState extends State Semantics( label: "我的", child: Obx( - () => _homeController.userLogin.value + () => _homeController.isLogin.value ? Stack( clipBehavior: Clip.none, children: [ @@ -433,7 +433,7 @@ class _MainAppState extends State ), const SizedBox(height: 8), Obx( - () => _homeController.userLogin.value + () => _homeController.isLogin.value ? Stack( clipBehavior: Clip.none, alignment: Alignment.center, diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index 5aaf5834..1af93196 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -14,14 +14,13 @@ class MineController extends GetxController { Rx userInfo = UserInfoData().obs; // 用户状态 动态、关注、粉丝 Rx userStat = UserStat().obs; - RxBool userLogin = false.obs; + + RxBool isLogin = false.obs; + Rx themeType = ThemeType.system.obs; - static Box get setting => GStorage.setting; - static RxBool anonymity = (setting.get(SettingBoxKey.anonymity, defaultValue: false) as bool).obs; - ThemeType get nextThemeType => ThemeType.values[(themeType.value.index + 1) % ThemeType.values.length]; @@ -32,23 +31,12 @@ class MineController extends GetxController { dynamic userInfoCache = GStorage.userInfo.get('userInfoCache'); if (userInfoCache != null) { userInfo.value = userInfoCache; - userLogin.value = true; + isLogin.value = true; } - - // themeType.value = ThemeType.values[GlobalData().themeMode]; - // anonymity = setting.get(SettingBoxKey.anonymity, defaultValue: false); } onLogin() async { - if (!userLogin.value) { - // Get.toNamed( - // '/webview', - // parameters: { - // 'url': 'https://passport.bilibili.com/h5-app/passport/login', - // 'type': 'login', - // 'pageTitle': '登录bilibili', - // }, - // ); + if (!isLogin.value) { Get.toNamed('/loginPage', preventDuplicates: false); } else { int mid = userInfo.value.mid!; @@ -59,7 +47,7 @@ class MineController extends GetxController { } Future queryUserInfo() async { - if (!userLogin.value) { + if (!isLogin.value) { return {'status': false}; } var res = await UserHttp.userInfo(); @@ -67,12 +55,9 @@ class MineController extends GetxController { if (res['data'].isLogin) { userInfo.value = res['data']; GStorage.userInfo.put('userInfoCache', res['data']); - userLogin.value = true; - } else { - resetUserInfo(); + isLogin.value = true; } } else { - // resetUserInfo(); SmartDialog.showToast(res['msg']); } await queryUserStatOwner(); @@ -87,14 +72,6 @@ class MineController extends GetxController { return res; } - Future resetUserInfo() async { - userInfo.value = UserInfoData(); - userStat.value = UserStat(); - GStorage.userInfo.delete('userInfoCache'); - userLogin.value = false; - anonymity.value = false; - } - static onChangeAnonymity(BuildContext context) { anonymity.value = !anonymity.value; if (anonymity.value) { @@ -216,7 +193,7 @@ class MineController extends GetxController { } pushFollow() { - if (!userLogin.value) { + if (!isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -224,7 +201,7 @@ class MineController extends GetxController { } pushFans() { - if (!userLogin.value) { + if (!isLogin.value) { SmartDialog.showToast('账号未登录'); return; } @@ -232,7 +209,7 @@ class MineController extends GetxController { } pushDynamic() { - if (!userLogin.value) { + if (!isLogin.value) { SmartDialog.showToast('账号未登录'); return; } diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index 2fbee7b3..0bfd12eb 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -18,29 +16,9 @@ class MinePage extends StatefulWidget { } class _MinePageState extends State { - final MineController mineController = Get.put(MineController()) - ..themeType.value = ThemeType.values[GStorage.themeTypeInt]; - late Future _futureBuilderFuture; - StreamSubscription? _listener; - - @override - void initState() { - super.initState(); - _futureBuilderFuture = mineController.queryUserInfo(); - - _listener = mineController.userLogin.listen((status) { - if (mounted) { - _futureBuilderFuture = mineController.queryUserInfo(); - _futureBuilderFuture.then((value) => setState(() {})); - } - }); - } - - @override - void dispose() { - _listener?.cancel(); - super.dispose(); - } + final MineController _mineController = Get.put(MineController()) + ..themeType.value = ThemeType.values[GStorage.themeTypeInt] + ..queryUserInfo(); Widget get _header => FittedBox( child: Row( @@ -85,14 +63,14 @@ class _MinePageState extends State { tapTargetSize: MaterialTapTargetSize.shrinkWrap, // the '2023' part ), - tooltip: '切换至${switch (mineController.nextThemeType) { + tooltip: '切换至${switch (_mineController.nextThemeType) { ThemeType.light => '浅色', ThemeType.dark => '深色', ThemeType.system => '跟随系统', }}主题', - onPressed: mineController.onChangeTheme, + onPressed: _mineController.onChangeTheme, icon: Icon( - switch (mineController.themeType.value) { + switch (_mineController.themeType.value) { ThemeType.light => MdiIcons.weatherSunny, ThemeType.dark => MdiIcons.weatherNight, ThemeType.system => MdiIcons.themeLightDark, @@ -132,25 +110,13 @@ class _MinePageState extends State { const SizedBox(height: 8), _header, const SizedBox(height: 10), - FutureBuilder( - future: _futureBuilderFuture, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - if (snapshot.data == null || !snapshot.data['status']) { - return userInfoBuild(mineController, context); - } - return Obx(() => userInfoBuild(mineController, context)); - } else { - return userInfoBuild(mineController, context); - } - }, - ), + Obx(userInfoBuild), ], ), ); } - Widget userInfoBuild(_mineController, context) { + Widget userInfoBuild() { LevelInfo? levelInfo = _mineController.userInfo.value.levelInfo; TextStyle style = TextStyle( fontSize: Theme.of(context).textTheme.titleMedium!.fontSize, diff --git a/lib/pages/setting/view.dart b/lib/pages/setting/view.dart index 3b0ca6c5..bc79be71 100644 --- a/lib/pages/setting/view.dart +++ b/lib/pages/setting/view.dart @@ -127,7 +127,7 @@ class SettingPage extends StatelessWidget { Get.find(); mainController.isLogin.value = false; } - await LoginUtils.refreshLoginStatus(false); + await LoginUtils.onLogout(); Get.back(); }, child: const Text('确认'), diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index 78cda95f..a96f1168 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -59,7 +59,7 @@ class VideoIntroController extends GetxController RxBool hasCoin = false.obs; // 是否收藏 RxBool hasFav = false.obs; - bool userLogin = false; + bool isLogin = false; Rx favFolderData = FavFolderData().obs; List addMediaIdsNew = []; List delMediaIdsNew = []; @@ -120,7 +120,7 @@ class VideoIntroController extends GetxController videoItem['owner'] = keys.contains('owner') ? args.owner : null; } } - userLogin = userInfo != null; + isLogin = userInfo != null; lastPlayCid.value = int.parse(Get.parameters['cid']!); isShowOnlineTotal = GStorage.setting .get(SettingBoxKey.enableOnlineTotal, defaultValue: false); @@ -171,7 +171,7 @@ class VideoIntroController extends GetxController "${result['code']} ${result['msg']} ${result['data']}"); } queryVideoIntroData.value = result; - if (userLogin) { + if (isLogin) { // 获取点赞状态 queryHasLikeVideo(); // 获取投币状态 diff --git a/lib/utils/login.dart b/lib/utils/login.dart index 43132438..3c912c6a 100644 --- a/lib/utils/login.dart +++ b/lib/utils/login.dart @@ -2,9 +2,12 @@ import 'dart:convert'; import 'dart:math'; import 'package:PiliPlus/http/loading_state.dart'; -import 'package:PiliPlus/utils/extension.dart'; +import 'package:PiliPlus/models/common/dynamics_type.dart'; +import 'package:PiliPlus/models/user/info.dart'; +import 'package:PiliPlus/models/user/stat.dart'; +import 'package:PiliPlus/pages/dynamics/tab/controller.dart'; +import 'package:PiliPlus/utils/storage.dart'; import 'package:crypto/crypto.dart'; -import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPlus/pages/dynamics/index.dart'; import 'package:PiliPlus/pages/home/index.dart'; @@ -13,25 +16,40 @@ import 'package:PiliPlus/pages/mine/index.dart'; import 'package:uuid/uuid.dart'; class LoginUtils { - static Future refreshLoginStatus(bool status) async { + static Future onLogout() async { + await GStorage.userInfo.delete('userInfoCache'); + try { - // logout - if (status.not) { - // 更改我的页面登录状态 - await Get.find().resetUserInfo(); - Get.find().loadingState.value = LoadingState.loading(); + Get.find() + ..userInfo.value = UserInfoData() + ..userStat.value = UserStat() + ..isLogin.value = false; + MineController.anonymity.value = false; + } catch (_) {} + + try { + Get.find() + ..isLogin.value = false + ..userFace.value = ''; + } catch (_) {} + + try { + Get.find() + ..isLogin.value = false + ..onRefresh(); + } catch (_) {} + + try { + Get.find() + ..mid = null + ..loadingState.value = LoadingState.loading(); + } catch (_) {} + + try { + for (int i = 0; i < tabsConfig.length; i++) { + Get.find(tag: tabsConfig[i]['tag']).onRefresh(); } - - // 更改主页登录状态 - Get.find().updateLoginStatus(status); - - Get.find().userLogin.value = status; - - Get.find().userLogin.value = status; - } catch (err) { - // SmartDialog.showToast('refreshLoginStatus error: ${err.toString()}'); - debugPrint('refreshLoginStatus error: $err'); - } + } catch (_) {} } static String buvid() { diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index bc3dea8c..13e0d049 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -13,12 +13,13 @@ import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/bangumi/info.dart'; import 'package:PiliPlus/models/common/search_type.dart'; +import 'package:PiliPlus/pages/dynamics/controller.dart'; import 'package:PiliPlus/pages/home/controller.dart'; import 'package:PiliPlus/pages/media/controller.dart'; +import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/pages/video/detail/introduction/widgets/group_panel.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/feed_back.dart'; -import 'package:PiliPlus/utils/login.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:crypto/crypto.dart'; import 'package:device_info_plus/device_info_plus.dart'; @@ -109,15 +110,30 @@ class Utils { '端」推荐'); await GStorage.userInfo.put('userInfoCache', result['data']); try { - Get.find() - ..updateLoginStatus(true) - ..userFace.value = result['data'].face; + Get.find() + ..isLogin.value = true + ..queryUserInfo(); + } catch (_) {} + try { + Get.find() + ..isLogin.value = true + ..userFace.value = result['data'].face; + } catch (_) {} + + try { + Get.find() + ..isLogin.value = true + ..ownerMid = result['data'].mid + ..face = result['data'].face + ..onRefresh(); + } catch (_) {} + + try { Get.find() ..mid = result['data'].mid ..onRefresh(); } catch (_) {} - await LoginUtils.refreshLoginStatus(true); } else { // 获取用户信息失败 SmartDialog.showNotify(