From 795fb23f64f4c9e74ce05fd5c0b876b044768e39 Mon Sep 17 00:00:00 2001 From: wuqifeng <540416539@qq.com> Date: Sat, 27 Apr 2024 12:29:11 +0800 Subject: [PATCH] feat:支付成功刷新用户数据 --- lib/models/user_entity.dart | 5 +++++ lib/pages/moduleSelect/view.dart | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------ lib/pages/shopping/view.dart | 4 +++- lib/pages/user/bloc/user_bloc.dart | 17 +++++++++++++++++ lib/pages/user/bloc/user_event.dart | 2 ++ lib/pages/user/bloc/user_state.dart | 2 ++ 6 files changed, 83 insertions(+), 43 deletions(-) diff --git a/lib/models/user_entity.dart b/lib/models/user_entity.dart index 44a68c1..5ed0e24 100644 --- a/lib/models/user_entity.dart +++ b/lib/models/user_entity.dart @@ -63,6 +63,11 @@ class UserEntity { : '女'; } + // 是否有游戏权限 + bool hasGamePermission() { + return valid ?? false; + } + UserEntity copyWith({ int? id, String? name, diff --git a/lib/pages/moduleSelect/view.dart b/lib/pages/moduleSelect/view.dart index c8b67ac..7a4a930 100644 --- a/lib/pages/moduleSelect/view.dart +++ b/lib/pages/moduleSelect/view.dart @@ -4,6 +4,7 @@ import 'package:wow_english/common/core/app_config_helper.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/pages/moduleSelect/state.dart'; import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; +import 'package:wow_english/pages/user/bloc/user_bloc.dart'; import '../../common/core/user_util.dart'; import '../../common/dialogs/show_dialog.dart'; @@ -27,16 +28,18 @@ class ModuleSelectPage extends StatelessWidget { class _HomePageView extends StatelessWidget { @override Widget build(BuildContext context) { - final bloc = BlocProvider.of(context); - return BlocListener( - listener: (context, state) {}, - child: _homeView(), - ); + return MultiBlocListener(listeners: [ + BlocListener(listener: (context, state) { + debugPrint('WQF ModuleSelectPage BlocListener state: $state'); + }), + BlocListener( + listener: (context, state) {}, + ), + ], child: _homeView()); } Widget _homeView() => BlocBuilder( builder: (context, state) { - final bloc = BlocProvider.of(context); return Scaffold( body: Container( color: Colors.white, @@ -79,46 +82,55 @@ class _HomePageView extends StatelessWidget { ), ), Expanded( - child: GestureDetector( - onTap: () { - //如果没登录先登录 - if (UserUtil.isLogined()) { - if (AppConfigHelper.shouldHidePay()) { - pushNamed(AppRouteName.games); - } else { - if (UserUtil.hasGamePermission()) { + child: BlocBuilder( + builder: (context, userState) { + final userBloc = BlocProvider.of(context); + debugPrint( + 'WQF ModuleSelectPage BlocBuilder state: $userState'); + return GestureDetector( + onTap: () { + //如果没登录先登录 + if (UserUtil.isLogined()) { + if (AppConfigHelper.shouldHidePay()) { pushNamed(AppRouteName.games); } else { - showTwoActionDialog( - '提示', '忽略', '去续费', - '您的课程已到期,请快快续费继续学习吧!', leftTap: () { - popPage(); - }, rightTap: () { - popPage(); - pushNamed(AppRouteName.shop); - }); + if (UserUtil.hasGamePermission()) { + pushNamed(AppRouteName.games); + } else { + showTwoActionDialog('提示', '忽略', '去续费', + '您的课程已到期,请快快续费继续学习吧!', leftTap: () { + popPage(); + }, rightTap: () { + popPage(); + pushNamed(AppRouteName.shop); + }); + } } + } else { + pushNamed(AppRouteName.login); } - } else { - pushNamed(AppRouteName.login); - } - }, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Stack( - alignment: AlignmentDirectional.center, - children: [ - Image.asset('bg_frame_module'.assetPng, - width: 162.5.w, height: 203.5.h), - Image.asset('pic_module_game'.assetPng, - width: 140.5.w, height: 172.h) - ]), - 10.verticalSpace, - Image.asset('label_module_game'.assetPng, - width: 124.w, height: 34.h), - ], - )), + }, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Stack( + alignment: AlignmentDirectional.center, + children: [ + Image.asset( + 'bg_frame_module'.assetPng, + width: 162.5.w, + height: 203.5.h), + Image.asset( + 'pic_module_game'.assetPng, + width: 140.5.w, + height: 172.h) + ]), + 10.verticalSpace, + Image.asset('label_module_game'.assetPng, + width: 124.w, height: 34.h), + ], + )); + }), ), ], ), diff --git a/lib/pages/shopping/view.dart b/lib/pages/shopping/view.dart index c5757bc..1ef973b 100644 --- a/lib/pages/shopping/view.dart +++ b/lib/pages/shopping/view.dart @@ -1,4 +1,3 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -8,6 +7,7 @@ import 'package:wow_english/models/product_entity.dart'; import '../../common/core/assets_const.dart'; import '../../common/widgets/we_app_bar.dart'; import '../../utils/image_util.dart'; +import '../user/bloc/user_bloc.dart'; import 'bloc.dart'; import 'event.dart'; import 'state.dart'; @@ -65,9 +65,11 @@ class _ShoppingView extends StatelessWidget { @override Widget build(BuildContext context) { final bloc = BlocProvider.of(context); + final userBloc = BlocProvider.of(context); return BlocListener( listener: (context, state) { if (state is PaySuccessState) { + userBloc.add(PayStateChangeEvent()); Navigator.pop(context); } }, diff --git a/lib/pages/user/bloc/user_bloc.dart b/lib/pages/user/bloc/user_bloc.dart index 8e0d3b0..5059e9d 100644 --- a/lib/pages/user/bloc/user_bloc.dart +++ b/lib/pages/user/bloc/user_bloc.dart @@ -12,12 +12,16 @@ part 'user_state.dart'; class UserBloc extends Bloc { final TextEditingController modifyTextController = TextEditingController(); int tempGender = 0; + UserEntity? _userEntityForPay; + + UserEntity? get userEntityForPay => _userEntityForPay; UserBloc() : super(UserInitial()) { on(_logout); on(_deleteAccount); on(_updateUser); on(_updateUIUser); + on(_patStateChanged); } void _logout(UserLogout event, Emitter emitter) async { @@ -78,4 +82,17 @@ class UserBloc extends Bloc { Log.e('修改个人信息失败: $e'); } } + + //支付状态变化 + void _patStateChanged(PayStateChangeEvent event, Emitter emitter) async { + // 由于userInfo接口不会返回token,所以这里需要再次保存一下token + final token = UserUtil.getUser()?.token; + _userEntityForPay = await UserDao.getUserInfo(); + if (_userEntityForPay == null) { + return; + } + _userEntityForPay?.token = token; + UserUtil.saveUser(_userEntityForPay); + emitter(UserPayStateChangedState()); + } } diff --git a/lib/pages/user/bloc/user_event.dart b/lib/pages/user/bloc/user_event.dart index 69423e1..fc03e7b 100644 --- a/lib/pages/user/bloc/user_event.dart +++ b/lib/pages/user/bloc/user_event.dart @@ -22,3 +22,5 @@ class UserUIUpdate extends UserEvent { UserUIUpdate(this.type); } + +class PayStateChangeEvent extends UserEvent {} \ No newline at end of file diff --git a/lib/pages/user/bloc/user_state.dart b/lib/pages/user/bloc/user_state.dart index 6b74425..f647ed8 100644 --- a/lib/pages/user/bloc/user_state.dart +++ b/lib/pages/user/bloc/user_state.dart @@ -5,3 +5,5 @@ sealed class UserState {} class UserInitial extends UserState {} class UserInfoUpdated extends UserState {} + +class UserPayStateChangedState extends UserState {} -- libgit2 0.22.2