mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: login/logout
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -4,6 +4,7 @@ class FollowUpModel {
|
||||
this.upList,
|
||||
});
|
||||
|
||||
String? errMsg;
|
||||
LiveUsers? liveUsers;
|
||||
List<UpItem>? upList;
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: [
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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('确认'),
|
||||
|
||||
@@ -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();
|
||||
// 获取投币状态
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user