diff --git a/lib/http/init.dart b/lib/http/init.dart index 39ca623dd..c5ba7d46b 100644 --- a/lib/http/init.dart +++ b/lib/http/init.dart @@ -10,7 +10,6 @@ import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/accounts/account_manager/account_mgr.dart'; import 'package:PiliPlus/utils/global_data.dart'; -import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:archive/archive.dart'; @@ -52,7 +51,7 @@ class Request { ); if (Accounts.main.isLogin) { - final coin = GStorage.userInfo.get('userInfoCache')?.money; + final coin = Pref.userInfoCache?.money; if (coin == null) { setCoin(); } else { diff --git a/lib/models/user/info.dart b/lib/models/user/info.dart index c4c29dabb..3bf261a14 100644 --- a/lib/models/user/info.dart +++ b/lib/models/user/info.dart @@ -111,6 +111,24 @@ class UserInfoData { shopUrl = json['shop_url']; isSeniorMember = json['is_senior_member']; } + + @override + int get hashCode => Object.hash(mid, uname, face, money, vipStatus); + + @override + bool operator ==(Object other) { + return identical(this, other) || + other is UserInfoData && + isLogin == other.isLogin && + face == other.face && + levelInfo == other.levelInfo && + mid == other.mid && + money == other.money && + uname == other.uname && + vipDueDate == other.vipDueDate && + vipStatus == other.vipStatus && + isSeniorMember == other.isSeniorMember; + } } @HiveType(typeId: 5) @@ -138,4 +156,13 @@ class LevelInfo { ? json['current_exp'] : json['next_exp']; } + + @override + int get hashCode => currentExp.hashCode; + + @override + bool operator ==(Object other) { + return identical(this, other) || + other is LevelInfo && currentExp == other.currentExp; + } } diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index 256335194..58603c257 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -28,7 +28,7 @@ import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/date_util.dart'; import 'package:PiliPlus/utils/duration_util.dart'; import 'package:PiliPlus/utils/id_utils.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart' hide TabBarView; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -385,7 +385,7 @@ class _EpisodePanelState extends CommonSlidePageState { child: InkWell( onTap: () { if (episode.badge == "会员") { - UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + UserInfoData? userInfo = Pref.userInfoCache; int vipStatus = userInfo?.vipStatus ?? 0; if (vipStatus != 1) { SmartDialog.showToast('需要大会员'); diff --git a/lib/pages/member_profile/view.dart b/lib/pages/member_profile/view.dart index 40dc105c4..93bb7df5f 100644 --- a/lib/pages/member_profile/view.dart +++ b/lib/pages/member_profile/view.dart @@ -15,6 +15,7 @@ import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/image_util.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:dio/dio.dart'; @@ -89,7 +90,7 @@ class _EditProfilePageState extends State { ..name.value = data.name! ..face.value = data.face!; try { - UserInfoData userInfo = GStorage.userInfo.get('userInfoCache') + UserInfoData userInfo = Pref.userInfoCache! ..uname = data.name ..face = data.face; GStorage.userInfo.put('userInfoCache', userInfo); @@ -386,7 +387,7 @@ class _EditProfilePageState extends State { ..coins = data.coins! - 6; accountService.name.value = _textController.text; try { - UserInfoData userInfo = GStorage.userInfo.get('userInfoCache') + UserInfoData userInfo = Pref.userInfoCache! ..uname = _textController.text; GStorage.userInfo.put('userInfoCache', userInfo); } catch (_) {} diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index c3b46614f..38dbc62c8 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -13,6 +13,7 @@ import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/login_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -82,7 +83,7 @@ class MineController @override void onInit() { super.onInit(); - UserInfoData? userInfoCache = GStorage.userInfo.get('userInfoCache'); + UserInfoData? userInfoCache = Pref.userInfoCache; if (userInfoCache != null) { userInfo.value = userInfoCache; queryData(); @@ -104,7 +105,9 @@ class MineController UserInfoData data = res.data; if (data.isLogin == true) { userInfo.value = data; - GStorage.userInfo.put('userInfoCache', data); + if (data != Pref.userInfoCache) { + GStorage.userInfo.put('userInfoCache', data); + } accountService ..mid = data.mid! ..name.value = data.uname! diff --git a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart index c1077020f..2d8ba7569 100644 --- a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart +++ b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/models_new/pgc/pgc_info_model/new_ep.dart'; import 'package:PiliPlus/models_new/video/video_detail/episode.dart' hide EpisodeItem; import 'package:PiliPlus/pages/video/controller.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -50,7 +50,7 @@ class _PgcPanelState extends State { currentIndex = widget.pages.indexWhere((e) => e.cid == cid); scrollToIndex(); - UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + UserInfoData? userInfo = Pref.userInfoCache; vipStatus = userInfo?.vipStatus ?? 0; videoDetailCtr = Get.find(tag: widget.heroTag); diff --git a/lib/pages/video/send_danmaku/view.dart b/lib/pages/video/send_danmaku/view.dart index 1dd7d28ed..10e86572a 100644 --- a/lib/pages/video/send_danmaku/view.dart +++ b/lib/pages/video/send_danmaku/view.dart @@ -4,10 +4,9 @@ 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/publish/common_text_pub_page.dart'; import 'package:PiliPlus/pages/setting/slide_color_picker.dart'; -import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:canvas_danmaku/models/danmaku_content_item.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show LengthLimitingTextInputFormatter; @@ -72,8 +71,7 @@ class _SendDanmakuPanelState extends CommonTextPubPageState { _mode = (widget.dmConfig?.mode ?? 1).obs; _fontsize = (widget.dmConfig?.fontsize ?? 25).obs; _color = (widget.dmConfig?.color ?? Colors.white).obs; - UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); - if (userInfo?.vipStatus == 1) { + if (Pref.userInfoCache?.vipStatus == 1) { _colorList.add(Colors.transparent); } } diff --git a/lib/services/account_service.dart b/lib/services/account_service.dart index ee6385d75..4d766bc13 100644 --- a/lib/services/account_service.dart +++ b/lib/services/account_service.dart @@ -1,5 +1,5 @@ import 'package:PiliPlus/models/user/info.dart'; -import 'package:PiliPlus/utils/storage.dart' show GStorage; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:get/get.dart'; class AccountService extends GetxService { @@ -11,7 +11,7 @@ class AccountService extends GetxService { @override void onInit() { super.onInit(); - UserInfoData? userInfo = GStorage.userInfo.get('userInfoCache'); + UserInfoData? userInfo = Pref.userInfoCache; mid = userInfo?.mid ?? 0; name = (userInfo?.uname ?? '').obs; face = (userInfo?.face ?? '').obs; diff --git a/lib/utils/login_utils.dart b/lib/utils/login_utils.dart index 98647af6e..3b32170da 100644 --- a/lib/utils/login_utils.dart +++ b/lib/utils/login_utils.dart @@ -17,6 +17,7 @@ import 'package:PiliPlus/services/account_service.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart' as web; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -57,7 +58,9 @@ class LoginUtils { ..isLogin.value = true; SmartDialog.showToast('main登录成功'); - await GStorage.userInfo.put('userInfoCache', data); + if (data != Pref.userInfoCache) { + await GStorage.userInfo.put('userInfoCache', data); + } try { Get.find().onRefresh(); diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index a5a8ae4eb..ec45c7cac 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -13,7 +13,7 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:path_provider/path_provider.dart'; class GStorage { - static late final Box userInfo; + static late final Box userInfo; static late final Box historyWord; static late final Box localCache; static late final Box setting; @@ -25,7 +25,7 @@ class GStorage { await Hive.initFlutter('$path/hive'); regAdapter(); // 登录用户信息 - userInfo = await Hive.openBox( + userInfo = await Hive.openBox( 'userInfo', compactionStrategy: (int entries, int deletedEntries) { return deletedEntries > 2; diff --git a/lib/utils/storage_pref.dart b/lib/utils/storage_pref.dart index 8c0f7b198..0cadebd95 100644 --- a/lib/utils/storage_pref.dart +++ b/lib/utils/storage_pref.dart @@ -17,6 +17,7 @@ import 'package:PiliPlus/models/common/video/subtitle_pref_type.dart'; import 'package:PiliPlus/models/common/video/video_decode_type.dart'; import 'package:PiliPlus/models/common/video/video_quality.dart'; import 'package:PiliPlus/models/user/danmaku_rule.dart'; +import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/plugin/pl_player/models/bottom_progress_behavior.dart'; import 'package:PiliPlus/plugin/pl_player/models/fullscreen_mode.dart'; import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart'; @@ -34,6 +35,9 @@ class Pref { static final Box _video = GStorage.video; static final Box _localCache = GStorage.localCache; + static UserInfoData? get userInfoCache => + GStorage.userInfo.get('userInfoCache'); + static List get dynamicDetailRatio => List.from( _setting.get( SettingBoxKey.dynamicDetailRatio,