From a4d8eaa2176819ff86c6929727eeb4c6d7c5ecbe Mon Sep 17 00:00:00 2001 From: Key Date: Mon, 3 Jul 2023 15:00:29 +0800 Subject: [PATCH] feat: 登录时账户有效性校验 --- android/app/src/main/AndroidManifest.xml | 2 +- android/app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes android/app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes android/app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes lib/app/splash_page.dart | 31 +++++++++++++++++++++++++------ lib/common/core/user_util.dart | 6 +++++- lib/common/request/apis.dart | 12 ++++++++++-- lib/common/request/dao/user_dao.dart | 10 ++++++++-- lib/pages/user/bloc/user_bloc.dart | 5 +++++ lib/pages/user/bloc/user_event.dart | 4 ++++ lib/pages/user/user_page.dart | 11 +++++++++++ lib/utils/log_util.dart | 30 +++++++++++++++++------------- 14 files changed, 86 insertions(+), 25 deletions(-) delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2f0d9c1..4e58ed2 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..220adae 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b7..0000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 09d4391..0000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..8674340 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..b620a7e 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/lib/app/splash_page.dart b/lib/app/splash_page.dart index 1bb4d0d..8bc50c5 100644 --- a/lib/app/splash_page.dart +++ b/lib/app/splash_page.dart @@ -1,15 +1,19 @@ import 'dart:async'; import 'dart:io'; +import 'dart:math'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:limiting_direction_csx/limiting_direction_csx.dart'; import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/extension/string_extension.dart'; +import 'package:wow_english/common/request/config.dart'; +import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/route/route.dart'; +import 'package:wow_english/utils/log_util.dart'; import 'package:wow_english/utils/sp_util.dart'; -import 'package:flutter/services.dart'; -import 'package:limiting_direction_csx/limiting_direction_csx.dart'; class SplashPage extends StatelessWidget { const SplashPage({super.key}); @@ -33,12 +37,27 @@ class _TransitionViewState extends State { Future startTime() async { // 判断是否登录 UserEntity? userEntity = UserUtil.getUser(); + Log.d('当前模式:kDebugMode=$kDebugMode, kProfileMode=$kProfileMode, kReleaseMode=$kReleaseMode'); + Log.d('当前API地址:${RequestConfig.baseUrl}'); if (kDebugMode) { - print('Splash读本地userEntity: $userEntity'); + Log.d('Splash读本地userEntity: $userEntity'); + } + int apartInMilliseconds = 0; + // 调一下接口判断一下有效性再往下 + if (userEntity != null) { + DateTime startTime = DateTime.now(); + try { + userEntity = await UserDao.getUserInfo(); + UserUtil.saveUser(userEntity); + } catch (e) { + e.logE(); + } + apartInMilliseconds = DateTime.now().difference(startTime).inMilliseconds; } - Timer(const Duration(seconds: 2), () { + Log.d('Splash getUserInfo 耗时:${apartInMilliseconds}ms'); + int duration = max(2000 - apartInMilliseconds, 0); + Timer(Duration(milliseconds: duration), () { if (userEntity != null) { - // todo 调一下接口判断一下有效性再往下 pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); } else { pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); @@ -64,7 +83,7 @@ class _TransitionViewState extends State { if (Platform.isIOS) { await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape); } else { - await SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight]); + await SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]); } } diff --git a/lib/common/core/user_util.dart b/lib/common/core/user_util.dart index b84d271..0f097a6 100644 --- a/lib/common/core/user_util.dart +++ b/lib/common/core/user_util.dart @@ -12,7 +12,11 @@ class UserUtil { static String get token => _userEntity?.token ?? ''; - static void saveUser(UserEntity user) { + static void saveUser(UserEntity? user) { + if (user == null) { + _clearUserData(); + return; + } _userEntity = user; _saveUserJson(user.toString()); } diff --git a/lib/common/request/apis.dart b/lib/common/request/apis.dart index 030d93a..35e7bd3 100644 --- a/lib/common/request/apis.dart +++ b/lib/common/request/apis.dart @@ -2,8 +2,8 @@ part of 'request_client.dart'; class Apis { /// app初始化配置信息 - // GET /system/app/config - // 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897678 + /// GET /system/app/config + /// 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897678 static const String appConfig = 'system/app/config'; /// 登录 @@ -12,7 +12,11 @@ class Apis { /// 登出 static const String logout = 'logout'; + /// 注销账号 + static const String deleteAccount = 'logout'; + /// 获取用户信息 + /// get static const String getUserInfo = 'student/info'; /// 更新用户信息 @@ -62,4 +66,8 @@ class Apis { /// 获取课程内容 /// GET static const String process = '/course/process'; + + /// 首页弹窗 + /// get + static const String homePopup = 'home/popup'; } diff --git a/lib/common/request/dao/user_dao.dart b/lib/common/request/dao/user_dao.dart index 409aa32..408734b 100644 --- a/lib/common/request/dao/user_dao.dart +++ b/lib/common/request/dao/user_dao.dart @@ -23,7 +23,13 @@ class UserDao { /// 登出 static Future logout() async { var result = await requestClient.post(Apis.logout); - print('logout result=$result'); + UserUtil.logout(); + return result; + } + + /// 注销账号 + static Future deleteAccount() async { + var result = await requestClient.post(Apis.deleteAccount); UserUtil.logout(); return result; } @@ -69,7 +75,7 @@ class UserDao { /// 获取用户信息 static Future getUserInfo() async { - return await requestClient.post(Apis.getUserInfo); + return await requestClient.get(Apis.getUserInfo); } /// 更新用户信息,返回即成功,无body diff --git a/lib/pages/user/bloc/user_bloc.dart b/lib/pages/user/bloc/user_bloc.dart index 5267fb4..54b7ad3 100644 --- a/lib/pages/user/bloc/user_bloc.dart +++ b/lib/pages/user/bloc/user_bloc.dart @@ -15,6 +15,7 @@ class UserBloc extends Bloc { UserBloc() : super(UserInitial()) { on(_logout); + on(_deleteAccount); on(_updateUser); on(_updateUIUser); } @@ -23,6 +24,10 @@ class UserBloc extends Bloc { await UserDao.logout(); } + void _deleteAccount(UserDelete event, Emitter emitter) async { + await UserDao.deleteAccount(); + } + void _updateUIUser(UserUIUpdate event, Emitter emitter) async { emitter(UserInfoUpdated()); } diff --git a/lib/pages/user/bloc/user_event.dart b/lib/pages/user/bloc/user_event.dart index ce6f199..50d41bd 100644 --- a/lib/pages/user/bloc/user_event.dart +++ b/lib/pages/user/bloc/user_event.dart @@ -4,8 +4,12 @@ sealed class UserEvent {} class UserStarted extends UserEvent {} +/// 退出账号 class UserLogout extends UserEvent {} +/// 注销账号 +class UserDelete extends UserEvent {} + class UserUpdate extends UserEvent { final ModifyUserInformationType type; diff --git a/lib/pages/user/user_page.dart b/lib/pages/user/user_page.dart index b0f6be6..d671ddb 100644 --- a/lib/pages/user/user_page.dart +++ b/lib/pages/user/user_page.dart @@ -189,6 +189,17 @@ class _UserView extends StatelessWidget { fontSize: 17.sp, ), )), + 30.verticalSpace, + TextButton( + onPressed: () => userBloc.add(UserDelete()), + child: Text( + "注销账号", + style: TextStyle( + //fontWeight: FontWeight.w600, + color: Colors.red, + fontSize: 15.sp, + ), + )), ], ), )); diff --git a/lib/utils/log_util.dart b/lib/utils/log_util.dart index a51b0de..51b5037 100644 --- a/lib/utils/log_util.dart +++ b/lib/utils/log_util.dart @@ -4,51 +4,55 @@ class Log { static LogLevel level = LogLevel.debug; /// debug - static void d(String message) { + static void d(Object? object) { if (level.index <= LogLevel.debug.index) { - print(message); + String line = "$object"; + print(line); } } /// info - static void i(String message) { + static void i(Object? object) { if (level.index <= LogLevel.info.index) { - print(message); + String line = "$object"; + print(line); } } /// warning - static void w(String message) { + static void w(Object? object) { if (level.index <= LogLevel.warning.index) { - print(message); + String line = "$object"; + print(line); } } /// error - static void e(String message) { + static void e(Object? object) { if (level.index <= LogLevel.error.index) { - print(message); + String line = "$object"; + print(line); } } } -extension LogExtension on String { - String logD() { +extension LogExtension on Object? { + Object? logD() { Log.d(this); return this; } - String logI() { + Object? logI() { Log.i(this); return this; } - String logW() { + Object? logW() { Log.w(this); return this; } - String logE() { + Object? logE() { Log.e(this); return this; } -- libgit2 0.22.2