opt: login/logout

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-01-08 13:23:11 +08:00
parent c77ceea262
commit e06a3d8f22
17 changed files with 174 additions and 237 deletions

View File

@@ -4,6 +4,7 @@ class FollowUpModel {
this.upList,
});
String? errMsg;
LiveUsers? liveUsers;
List<UpItem>? upList;

View File

@@ -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(

View File

@@ -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();

View File

@@ -51,7 +51,7 @@ class BangumiIntroController extends CommonController {
// 是否收藏
RxBool hasFav = false.obs;
dynamic videoTags;
bool userLogin = false;
bool isLogin = false;
Rx<FavFolderData> 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();
}
}

View File

@@ -74,7 +74,7 @@ class _BangumiPageState extends State<BangumiPage>
SliverToBoxAdapter(
child: Obx(
() => Visibility(
visible: _bangumiController.userLogin.value,
visible: _bangumiController.isLogin.value,
child: Column(
children: [
Padding(

View File

@@ -30,8 +30,9 @@ class DynamicsController extends GetxController
RxList<int> tempBannedList = <int>[].obs;
late List<Widget> tabsPageList;
RxInt initialValue = 0.obs;
RxBool userLogin = false.obs;
dynamic userInfo;
RxBool isLogin = false.obs;
dynamic ownerMid;
dynamic face;
RxBool isLoadingDynamic = false.obs;
List<UpItem> hasUpdatedUps = <UpItem>[];
List<UpItem> allFollowedUps = <UpItem>[];
@@ -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<dynamic> 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(<Future>[
queryFollowUp(),
Get.find<DynamicsTabController>(
tag: tabsConfig[tabController.index]['tag'])
.onRefresh()

View File

@@ -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<DynamicsPage>
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<DynamicsPage>
}),
),
onPressed: () {
if (GStorage.isLogin) {
if (_dynamicsController.isLogin.value) {
showModalBottomSheet(
context: context,
useSafeArea: true,
@@ -85,24 +81,6 @@ class _DynamicsPageState extends State<DynamicsPage>
@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<DynamicsPage>
@override
void dispose() {
_listener?.cancel();
_dynamicsController.tabController.removeListener(() {});
_dynamicsController.scrollController.removeListener(() {});
super.dispose();
@@ -136,41 +113,25 @@ class _DynamicsPageState extends State<DynamicsPage>
? 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,
);
}
},
),

View File

@@ -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<UpPanel> createState() => _UpPanelState();
@@ -19,27 +21,21 @@ class UpPanel extends StatefulWidget {
class _UpPanelState extends State<UpPanel> {
int currentMid = -1;
List<UpItem> upList = [];
List<LiveUserItem> liveList = [];
dynamic userInfo;
List<UpItem> get upList =>
widget.dynamicsController.upData.value.upList ?? <UpItem>[];
List<LiveUserItem> get liveList =>
widget.dynamicsController.upData.value.liveUsers?.items ??
<LiveUserItem>[];
bool _showLiveItems = false;
late DynamicsController dynamicsController;
@override
void initState() {
super.initState();
userInfo = GStorage.userInfo.get('userInfoCache');
dynamicsController = Get.find<DynamicsController>();
}
@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<UpPanel> {
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<UpPanel> {
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;

View File

@@ -14,7 +14,7 @@ class HomeController extends GetxController with GetTickerProviderStateMixin {
late TabController tabController;
late List tabsCtrList;
late List<Widget> tabsPageList;
RxBool userLogin = false.obs;
RxBool isLogin = false.obs;
RxString userFace = ''.obs;
dynamic userInfo;
late final StreamController<bool> 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

View File

@@ -89,7 +89,7 @@ class _HomePageState extends State<HomePage>
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<HomePage>
Semantics(
label: "我的",
child: Obx(
() => _homeController.userLogin.value
() => _homeController.isLogin.value
? Stack(
clipBehavior: Clip.none,
children: [

View File

@@ -374,7 +374,7 @@ class _MainAppState extends State<MainApp>
Semantics(
label: "我的",
child: Obx(
() => _homeController.userLogin.value
() => _homeController.isLogin.value
? Stack(
clipBehavior: Clip.none,
children: [
@@ -433,7 +433,7 @@ class _MainAppState extends State<MainApp>
),
const SizedBox(height: 8),
Obx(
() => _homeController.userLogin.value
() => _homeController.isLogin.value
? Stack(
clipBehavior: Clip.none,
alignment: Alignment.center,

View File

@@ -14,14 +14,13 @@ class MineController extends GetxController {
Rx<UserInfoData> userInfo = UserInfoData().obs;
// 用户状态 动态、关注、粉丝
Rx<UserStat> userStat = UserStat().obs;
RxBool userLogin = false.obs;
RxBool isLogin = false.obs;
Rx<ThemeType> 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;
}

View File

@@ -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<MinePage> {
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<MinePage> {
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<MinePage> {
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,

View File

@@ -127,7 +127,7 @@ class SettingPage extends StatelessWidget {
Get.find<MainController>();
mainController.isLogin.value = false;
}
await LoginUtils.refreshLoginStatus(false);
await LoginUtils.onLogout();
Get.back();
},
child: const Text('确认'),

View File

@@ -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 = 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();
// 获取投币状态

View File

@@ -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<MineController>().resetUserInfo();
Get.find<MediaController>().loadingState.value = LoadingState.loading();
Get.find<MineController>()
..userInfo.value = UserInfoData()
..userStat.value = UserStat()
..isLogin.value = false;
MineController.anonymity.value = false;
} catch (_) {}
try {
Get.find<HomeController>()
..isLogin.value = false
..userFace.value = '';
} catch (_) {}
try {
Get.find<DynamicsController>()
..isLogin.value = false
..onRefresh();
} catch (_) {}
try {
Get.find<MediaController>()
..mid = null
..loadingState.value = LoadingState.loading();
} catch (_) {}
try {
for (int i = 0; i < tabsConfig.length; i++) {
Get.find<DynamicsTabController>(tag: tabsConfig[i]['tag']).onRefresh();
}
// 更改主页登录状态
Get.find<HomeController>().updateLoginStatus(status);
Get.find<MineController>().userLogin.value = status;
Get.find<DynamicsController>().userLogin.value = status;
} catch (err) {
// SmartDialog.showToast('refreshLoginStatus error: ${err.toString()}');
debugPrint('refreshLoginStatus error: $err');
}
} catch (_) {}
}
static String buvid() {

View File

@@ -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<HomeController>()
..updateLoginStatus(true)
..userFace.value = result['data'].face;
Get.find<MineController>()
..isLogin.value = true
..queryUserInfo();
} catch (_) {}
try {
Get.find<HomeController>()
..isLogin.value = true
..userFace.value = result['data'].face;
} catch (_) {}
try {
Get.find<DynamicsController>()
..isLogin.value = true
..ownerMid = result['data'].mid
..face = result['data'].face
..onRefresh();
} catch (_) {}
try {
Get.find<MediaController>()
..mid = result['data'].mid
..onRefresh();
} catch (_) {}
await LoginUtils.refreshLoginStatus(true);
} else {
// 获取用户信息失败
SmartDialog.showNotify(