fix: 登录/退出登录页面刷新

This commit is contained in:
guozhigq
2023-08-19 15:25:00 +08:00
parent 7c2518bcd2
commit 2b0dc9d285
9 changed files with 206 additions and 81 deletions

View File

@ -3,6 +3,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/http/dynamics.dart';
import 'package:pilipala/http/search.dart';
import 'package:pilipala/models/bangumi/info.dart';
@ -12,6 +13,7 @@ import 'package:pilipala/models/dynamics/result.dart';
import 'package:pilipala/models/dynamics/up.dart';
import 'package:pilipala/models/live/item.dart';
import 'package:pilipala/utils/feed_back.dart';
import 'package:pilipala/utils/storage.dart';
import 'package:pilipala/utils/utils.dart';
class DynamicsController extends GetxController {
@ -49,8 +51,19 @@ class DynamicsController extends GetxController {
];
bool flag = false;
RxInt initialValue = 1.obs;
Box user = GStrorage.user;
RxBool userLogin = false.obs;
@override
void onInit() {
userLogin.value = user.get(UserBoxKey.userLogin, defaultValue: false);
super.onInit();
}
Future queryFollowDynamic({type = 'init'}) async {
if (!userLogin.value) {
return {'status': false, 'msg': '未登录'};
}
if (type == 'init') {
dynamicsList.clear();
}

View File

@ -9,6 +9,7 @@ import 'package:pilipala/common/skeleton/dynamic_card.dart';
import 'package:pilipala/common/widgets/http_error.dart';
import 'package:pilipala/models/dynamics/result.dart';
import 'package:pilipala/pages/main/index.dart';
import 'package:pilipala/utils/event_bus.dart';
import 'package:pilipala/utils/feed_back.dart';
import 'package:pilipala/utils/storage.dart';
@ -30,6 +31,7 @@ class _DynamicsPageState extends State<DynamicsPage>
late Future _futureBuilderFutureUp;
bool _isLoadingMore = false;
Box user = GStrorage.user;
EventBus eventBus = EventBus();
@override
bool get wantKeepAlive => true;
@ -62,6 +64,14 @@ class _DynamicsPageState extends State<DynamicsPage>
}
},
);
eventBus.on(EventName.loginEvent, (args) {
_dynamicsController.userLogin.value = args['status'];
setState(() {
_futureBuilderFuture = _dynamicsController.queryFollowDynamic();
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
});
});
}
@override
@ -107,71 +117,82 @@ class _DynamicsPageState extends State<DynamicsPage>
return const SizedBox();
}
}),
Obx(() => Visibility(
visible: _dynamicsController.mid.value == -1,
child: CustomSlidingSegmentedControl<int>(
initialValue: _dynamicsController.initialValue.value,
children: {
1: Text(
'全部',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize),
Obx(
() => _dynamicsController.userLogin.value
? Visibility(
visible: _dynamicsController.mid.value == -1,
child: CustomSlidingSegmentedControl<int>(
initialValue:
_dynamicsController.initialValue.value,
children: {
1: Text(
'全部',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize),
),
2: Text('投稿',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize)),
3: Text('番剧',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize)),
// 4: Text(
// '专栏',
// style: TextStyle(
// fontSize: Theme.of(context)
// .textTheme
// .labelMedium!
// .fontSize),
// ),
},
padding: 13.0,
decoration: BoxDecoration(
color: Theme.of(context)
.colorScheme
.surfaceVariant
.withOpacity(0.7),
borderRadius: BorderRadius.circular(20),
),
thumbDecoration: BoxDecoration(
color: Theme.of(context).colorScheme.background,
borderRadius: BorderRadius.circular(20),
),
duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
onValueChanged: (v) {
feedBack();
_dynamicsController.onSelectType(v);
},
),
2: Text('投稿',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize)),
3: Text('番剧',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize)),
// 4: Text(
// '专栏',
// style: TextStyle(
// fontSize: Theme.of(context)
// .textTheme
// .labelMedium!
// .fontSize),
// ),
},
padding: 13.0,
decoration: BoxDecoration(
color: Theme.of(context)
.colorScheme
.surfaceVariant
.withOpacity(0.7),
borderRadius: BorderRadius.circular(20),
),
thumbDecoration: BoxDecoration(
color: Theme.of(context).colorScheme.background,
borderRadius: BorderRadius.circular(20),
),
duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
onValueChanged: (v) {
feedBack();
_dynamicsController.onSelectType(v);
},
),
))
)
: Text('动态',
style: Theme.of(context).textTheme.titleMedium),
)
],
),
Positioned(
right: 4,
top: 0,
bottom: 0,
child: IconButton(
padding: EdgeInsets.zero,
onPressed: () =>
{feedBack(), _dynamicsController.resetSearch()},
icon: const Icon(Icons.history, size: 21),
Obx(
() => Visibility(
visible: _dynamicsController.userLogin.value,
child: Positioned(
right: 4,
top: 0,
bottom: 0,
child: IconButton(
padding: EdgeInsets.zero,
onPressed: () =>
{feedBack(), _dynamicsController.resetSearch()},
icon: const Icon(Icons.history, size: 21),
),
),
),
),
],

View File

@ -4,6 +4,7 @@ import 'package:hive/hive.dart';
import 'package:pilipala/pages/dynamics/index.dart';
import 'package:pilipala/pages/home/index.dart';
import 'package:pilipala/pages/media/index.dart';
import 'package:pilipala/utils/event_bus.dart';
import 'package:pilipala/utils/feed_back.dart';
import 'package:pilipala/utils/storage.dart';
import './controller.dart';
@ -96,6 +97,7 @@ class _MainAppState extends State<MainApp> with SingleTickerProviderStateMixin {
@override
void dispose() async {
await GStrorage.close();
EventBus().off(EventName.loginEvent);
super.dispose();
}

View File

@ -3,6 +3,7 @@ import 'package:get/get.dart';
import 'package:pilipala/common/widgets/network_img_layer.dart';
import 'package:pilipala/models/user/fav_folder.dart';
import 'package:pilipala/pages/media/index.dart';
import 'package:pilipala/utils/event_bus.dart';
import 'package:pilipala/utils/utils.dart';
class MediaPage extends StatefulWidget {
@ -16,6 +17,7 @@ class _MediaPageState extends State<MediaPage>
with AutomaticKeepAliveClientMixin {
late MediaController mediaController;
late Future _futureBuilderFuture;
EventBus eventBus = EventBus();
@override
bool get wantKeepAlive => true;
@ -25,6 +27,12 @@ class _MediaPageState extends State<MediaPage>
super.initState();
mediaController = Get.put(MediaController());
_futureBuilderFuture = mediaController.queryFavFolder();
eventBus.on(EventName.loginEvent, (args) {
mediaController.userLogin.value = args['status'];
setState(() {
_futureBuilderFuture = mediaController.queryFavFolder();
});
});
}
@override
@ -68,7 +76,7 @@ class _MediaPageState extends State<MediaPage>
),
),
],
Obx(() => mediaController.userLogin.value == true
Obx(() => mediaController.userLogin.value
? favFolder(mediaController, context)
: const SizedBox())
],

View File

@ -32,9 +32,6 @@ class MineController extends GetxController {
onLogin() async {
if (!userLogin.value) {
/// TODO
Get.back();
await Future.delayed(const Duration(milliseconds: 150));
Get.toNamed(
'/webview',
parameters: {

View File

@ -6,15 +6,37 @@ import 'package:get/get.dart';
import 'package:pilipala/common/constants.dart';
import 'package:pilipala/common/widgets/network_img_layer.dart';
import 'package:pilipala/models/common/theme_type.dart';
import 'package:pilipala/utils/event_bus.dart';
import 'controller.dart';
class MinePage extends StatelessWidget {
class MinePage extends StatefulWidget {
const MinePage({super.key});
@override
Widget build(BuildContext context) {
final MineController mineController = Get.put(MineController());
State<MinePage> createState() => _MinePageState();
}
class _MinePageState extends State<MinePage> {
final MineController mineController = Get.put(MineController());
late Future _futureBuilderFuture;
EventBus eventBus = EventBus();
@override
void initState() {
super.initState();
_futureBuilderFuture = mineController.queryUserInfo();
eventBus.on(EventName.loginEvent, (args) {
mineController.userLogin.value = args['status'];
if (mounted) {
setState(() {
_futureBuilderFuture = mineController.queryUserInfo();
});
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
@ -61,7 +83,7 @@ class MinePage extends StatelessWidget {
children: [
const SizedBox(height: 10),
FutureBuilder(
future: mineController.queryUserInfo(),
future: _futureBuilderFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.data['status']) {

View File

@ -6,6 +6,7 @@ import 'package:pilipala/http/init.dart';
import 'package:pilipala/models/common/theme_type.dart';
import 'package:pilipala/pages/home/index.dart';
import 'package:pilipala/pages/mine/controller.dart';
import 'package:pilipala/utils/event_bus.dart';
import 'package:pilipala/utils/feed_back.dart';
import 'package:pilipala/utils/storage.dart';
@ -46,14 +47,25 @@ class SettingController extends GetxController {
),
TextButton(
onPressed: () async {
// 清空cookie
await Request.cookieManager.cookieJar.deleteAll();
await Get.find<MineController>().resetUserInfo();
userLogin.value = user.get(UserBoxKey.userLogin) ?? false;
Request.dio.options.headers['cookie'] = '';
// 清空本地存储的用户标识
userInfoCache.put('userInfoCache', null);
user.put(UserBoxKey.accessKey, {'mid': -1, 'value': ''});
// 更改我的页面登录状态
await Get.find<MineController>().resetUserInfo();
// 更改主页登录状态
HomeController homeCtr = Get.find<HomeController>();
homeCtr.updateLoginStatus(false);
user.put(UserBoxKey.accessKey, {'mid': -1, 'value': ''});
Request.dio.options.headers['cookie'] = '';
// 事件通知
EventBus eventBus = EventBus();
eventBus.emit(EventName.loginEvent, {'status': false});
SmartDialog.dismiss().then((value) => Get.back());
},
child: const Text('确认'),

View File

@ -6,11 +6,9 @@ import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/http/init.dart';
import 'package:pilipala/http/user.dart';
import 'package:pilipala/pages/dynamics/index.dart';
import 'package:pilipala/pages/home/index.dart';
import 'package:pilipala/pages/mine/index.dart';
import 'package:pilipala/pages/rcmd/controller.dart';
import 'package:pilipala/utils/cookie.dart';
import 'package:pilipala/utils/event_bus.dart';
import 'package:pilipala/utils/storage.dart';
import 'package:webview_flutter/webview_flutter.dart';
@ -21,6 +19,7 @@ class WebviewController extends GetxController {
final WebViewController controller = WebViewController();
RxInt loadProgress = 0.obs;
RxBool loadShow = true.obs;
EventBus eventBus = EventBus();
@override
void onInit() {
@ -74,10 +73,8 @@ class WebviewController extends GetxController {
Box userInfoCache = GStrorage.userInfo;
userInfoCache.put('userInfoCache', result['data']);
Get.find<MineController>().userInfo.value = result['data'];
Get.find<MineController>().onInit();
Get.find<RcmdController>().queryRcmdFeed('onRefresh');
Get.find<DynamicsController>().onRefresh();
// 通知更新
eventBus.emit(EventName.loginEvent, {'status': true});
HomeController homeCtr = Get.find<HomeController>();
homeCtr.updateLoginStatus(true);