diff --git a/lib/app/app.dart b/lib/app/app.dart index 21b16f2..28cfa2c 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -4,7 +4,6 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:responsive_framework/breakpoint.dart'; import 'package:responsive_framework/responsive_breakpoints.dart'; -import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; import 'package:wow_english/common/widgets/hide_keyboard_widget.dart'; import 'package:wow_english/pages/tab/blocs/tab_bloc.dart'; import 'package:wow_english/route/route.dart'; @@ -19,7 +18,6 @@ class App extends StatelessWidget { builder: (_, __) => MultiBlocProvider( providers: [ BlocProvider(create: (_) => TabBloc()), - BlocProvider(create: (_) => CacheBloc()) ], child: HideKeyboard( child: MaterialApp( diff --git a/lib/app/splash_page.dart b/lib/app/splash_page.dart index d5c8572..8e979cd 100644 --- a/lib/app/splash_page.dart +++ b/lib/app/splash_page.dart @@ -2,15 +2,12 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/sp_util.dart'; -import '../common/blocs/cachebloc/cache_bloc.dart'; - class SplashPage extends StatelessWidget { const SplashPage({super.key}); @@ -34,11 +31,11 @@ class _TransitionViewState extends State { // 判断是否登录 UserEntity? userEntity = UserUtil.getUser(); if (kDebugMode) { - print('userEntity: $userEntity'); + print('Splash读本地userEntity: $userEntity'); } Timer(const Duration(seconds: 2), () { - if (userEntity != null && userEntity.token.isNotEmpty) { - context.read().add(UserInfoChangeEvent(userEntity)); + if (userEntity != null) { + // todo 调一下接口判断一下有效性再往下 Navigator.of(context).pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); } else { Navigator.of(context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); diff --git a/lib/common/blocs/cachebloc/cache_bloc.dart b/lib/common/blocs/cachebloc/cache_bloc.dart index 84c3212..db5bb2f 100644 --- a/lib/common/blocs/cachebloc/cache_bloc.dart +++ b/lib/common/blocs/cachebloc/cache_bloc.dart @@ -1,27 +1,8 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:wow_english/models/user_entity.dart'; part 'cache_event.dart'; part 'cache_state.dart'; class CacheBloc extends Bloc { - UserEntity? _userEntity; - - UserEntity? get userEntity => _userEntity; - - CacheBloc() : super(CacheInitial()) { - on(_userInfoChange); - on(_userInfoClear); - } - - void _userInfoChange(UserInfoChangeEvent event,Emitter emitter) async { - _userEntity = event.userEntity; - emitter(UserInfoChangeState()); - } - - void _userInfoClear(UserInfoClearEvent event,Emitter emitter) async { - _userEntity = null; - emitter(UserInfoClearState()); - } + CacheBloc() : super(CacheInitial()); } diff --git a/lib/common/blocs/cachebloc/cache_event.dart b/lib/common/blocs/cachebloc/cache_event.dart index d55cf08..cc9d2ef 100644 --- a/lib/common/blocs/cachebloc/cache_event.dart +++ b/lib/common/blocs/cachebloc/cache_event.dart @@ -1,11 +1,3 @@ part of 'cache_bloc.dart'; -@immutable -abstract class CacheEvent {} - -class UserInfoChangeEvent extends CacheEvent{ - UserEntity? userEntity; - UserInfoChangeEvent(this.userEntity); -} - -class UserInfoClearEvent extends CacheEvent {} +sealed class CacheEvent {} diff --git a/lib/common/blocs/cachebloc/cache_state.dart b/lib/common/blocs/cachebloc/cache_state.dart index ead34dd..f4ad7bc 100644 --- a/lib/common/blocs/cachebloc/cache_state.dart +++ b/lib/common/blocs/cachebloc/cache_state.dart @@ -1,10 +1,5 @@ part of 'cache_bloc.dart'; -@immutable -abstract class CacheState {} +sealed class CacheState {} class CacheInitial extends CacheState {} - -class UserInfoChangeState extends CacheState {} - -class UserInfoClearState extends CacheState {} diff --git a/lib/common/core/user_util.dart b/lib/common/core/user_util.dart index 5b5f744..b84d271 100644 --- a/lib/common/core/user_util.dart +++ b/lib/common/core/user_util.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:wow_english/common/core/sp_const.dart'; import 'package:wow_english/models/user_entity.dart'; @@ -7,44 +8,49 @@ import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/sp_util.dart'; class UserUtil { - static String token = ''; + static UserEntity? _userEntity; + + static String get token => _userEntity?.token ?? ''; static void saveUser(UserEntity user) { - token = user.token; - saveUserJson(user.toString()); + _userEntity = user; + _saveUserJson(user.toString()); } static UserEntity? getUser() { - String? userJson = getUserJson(); - if (userJson != null && userJson.isNotEmpty) { - var userEntity = UserEntity.fromJson(json.decode(userJson)); - // todo 并且在有效期,计算一下, "expireTime": 2592000 倒计时需要手动转换,后面再优化 - if (userEntity.token.isNotEmpty) { - token = userEntity.token; - return userEntity; - } else { - // token为空或失效的,清除sp - clearUserSp(); + if (_userEntity == null) { + String? userJson = _getUserJson(); + if (userJson != null && userJson.isNotEmpty) { + try { + var userEntity = UserEntity.fromJson(json.decode(userJson)); + // todo 并且在有效期,计算一下, "expireTime": 2592000 倒计时需要手动转换,后面再优化 + _userEntity = userEntity; + } catch (e) { + if (kDebugMode) { + print(e); + } + _clearUserData(); + } } } - return null; + return _userEntity; } - static void saveUserJson(String userJson) { + static void _saveUserJson(String userJson) { SpUtil.getInstance().setData(SpConst.prefsKeyUserInfo, userJson); } - static String? getUserJson() { + static String? _getUserJson() { return SpUtil.getInstance().get(SpConst.prefsKeyUserInfo); } - static void clearUserSp() { - token = ''; + static void _clearUserData() { + _userEntity = null; SpUtil.getInstance().remove(SpConst.prefsKeyUserInfo); } static void logout() { - clearUserSp(); + _clearUserData(); Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); } } diff --git a/lib/common/request/dao/user_dao.dart b/lib/common/request/dao/user_dao.dart index b5f4f66..e80e559 100644 --- a/lib/common/request/dao/user_dao.dart +++ b/lib/common/request/dao/user_dao.dart @@ -11,7 +11,7 @@ class UserDao { Apis.login, data: params, ); - if (data != null && data.token.isNotEmpty) { + if (data != null) { UserUtil.saveUser(data); } return data; diff --git a/lib/pages/home/widgets/home_tab_header_widget.dart b/lib/pages/home/widgets/home_tab_header_widget.dart index 4e21be7..07ce4ac 100644 --- a/lib/pages/home/widgets/home_tab_header_widget.dart +++ b/lib/pages/home/widgets/home_tab_header_widget.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; +import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/extension/string_extension.dart'; +import 'package:wow_english/utils/image_util.dart'; enum HeaderActionType { //视频跟读 @@ -44,10 +44,7 @@ class HomeTabHeaderWidget extends StatelessWidget { ), child: CircleAvatar( radius: 21, - backgroundImage: NetworkImage( - context.read().userEntity?.avatarUrl ?? - 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2Faa1c2213-820a-4223-8757-5f8cee318a28%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1688713226&t=192b18a613683bcdc5bd76f65c9ff032', - ), + backgroundImage: ImageUtil.getImageProviderOnDefault(UserUtil.getUser()?.avatarUrl), ), ), ), @@ -66,7 +63,7 @@ class HomeTabHeaderWidget extends StatelessWidget { border: Border.all(width: 1.0, color: const Color(0xFF140C10), style: BorderStyle.solid), ), child: Text( - context.read().userEntity?.name ?? '', + UserUtil.getUser()?.name ?? '姓名丢了', style: TextStyle(color: const Color(0xFF333333), fontSize: 16.sp), ), ), diff --git a/lib/pages/login/loginpage/bloc/login_bloc.dart b/lib/pages/login/loginpage/bloc/login_bloc.dart index 119fb0a..8fff7c2 100644 --- a/lib/pages/login/loginpage/bloc/login_bloc.dart +++ b/lib/pages/login/loginpage/bloc/login_bloc.dart @@ -5,7 +5,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/common/request/exception.dart'; -import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/utils/loading.dart'; import 'package:wow_english/utils/toast_util.dart'; @@ -76,9 +75,9 @@ class LoginBloc extends Bloc { await loading(() async { var user = await UserDao.login(phoneNumber, type, checkKey, checkNumber); if (kDebugMode) { - print('UserEntity?=$user'); + print('登陆 UserEntity=$user'); } - emitter.call(LoginResultChangeState(user!)); + emitter.call(LoginResultChangeState()); }); } catch (e) { if (kDebugMode) { diff --git a/lib/pages/login/loginpage/bloc/login_state.dart b/lib/pages/login/loginpage/bloc/login_state.dart index 662bcec..e957e1b 100644 --- a/lib/pages/login/loginpage/bloc/login_state.dart +++ b/lib/pages/login/loginpage/bloc/login_state.dart @@ -21,8 +21,4 @@ class AgreementTypeChangeState extends LoginState {} class SmsCodeRequestState extends LoginState {} ///登陆请求结果 -class LoginResultChangeState extends LoginState { - final UserEntity userEntity; - - LoginResultChangeState(this.userEntity); -} +class LoginResultChangeState extends LoginState {} diff --git a/lib/pages/login/loginpage/login_page.dart b/lib/pages/login/loginpage/login_page.dart index 2c5d0e1..14edaea 100644 --- a/lib/pages/login/loginpage/login_page.dart +++ b/lib/pages/login/loginpage/login_page.dart @@ -2,7 +2,6 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; import 'package:wow_english/common/core/app_consts.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/widgets/textfield_customer_widget.dart'; @@ -29,9 +28,9 @@ class _LoginPageView extends StatelessWidget { return BlocListener( listener: (context, state) { if (state is LoginResultChangeState) { - context.read().add(UserInfoChangeEvent(state.userEntity)); - Navigator.of(context).pushNamed(AppRouteName.home); - // Navigator.of(context).pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); + // 调试用 + // Navigator.of(context).pushNamed(AppRouteName.home); + Navigator.of(context).pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); } }, child: _buildLoginViewWidget(), @@ -117,7 +116,8 @@ class _LoginPageView extends StatelessWidget { recognizer: TapGestureRecognizer() ..onTap = () { Navigator.of(context).pushNamed(AppRouteName.webView, arguments: { - 'urlStr': 'https://ishowedu-public-images.ishowedu.com/%E5%8F%A3%E8%AF%AD%E6%98%9F%E7%90%83%E5%84%BF%E7%AB%A5%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E6%94%BF%E7%AD%96_iShowLD%E4%BF%AE%E8%AE%A2_20210913%281%29.html', + 'urlStr': + 'https://ishowedu-public-images.ishowedu.com/%E5%8F%A3%E8%AF%AD%E6%98%9F%E7%90%83%E5%84%BF%E7%AB%A5%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E6%94%BF%E7%AD%96_iShowLD%E4%BF%AE%E8%AE%A2_20210913%281%29.html', 'webViewTitle': '儿童隐私协议' }); }) diff --git a/lib/pages/user/user_page.dart b/lib/pages/user/user_page.dart index c593735..431f626 100644 --- a/lib/pages/user/user_page.dart +++ b/lib/pages/user/user_page.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; import 'package:wow_english/common/core/app_consts.dart'; import 'package:wow_english/common/core/assets_const.dart'; +import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/widgets/we_app_bar.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; @@ -36,8 +36,7 @@ class _UserView extends StatelessWidget { return current != previous; },*/ builder: (context, state) { - final cacheBloc = BlocProvider.of(context); - UserEntity user = cacheBloc.userEntity!; + UserEntity user = UserUtil.getUser()!; final userBloc = BlocProvider.of(context); // 常规按钮的字体样式