Commit 795fb23f64f4c9e74ce05fd5c0b876b044768e39
1 parent
e0766888
feat:支付成功刷新用户数据
Showing
6 changed files
with
83 additions
and
43 deletions
lib/models/user_entity.dart
@@ -63,6 +63,11 @@ class UserEntity { | @@ -63,6 +63,11 @@ class UserEntity { | ||
63 | : '女'; | 63 | : '女'; |
64 | } | 64 | } |
65 | 65 | ||
66 | + // 是否有游戏权限 | ||
67 | + bool hasGamePermission() { | ||
68 | + return valid ?? false; | ||
69 | + } | ||
70 | + | ||
66 | UserEntity copyWith({ | 71 | UserEntity copyWith({ |
67 | int? id, | 72 | int? id, |
68 | String? name, | 73 | String? name, |
lib/pages/moduleSelect/view.dart
@@ -4,6 +4,7 @@ import 'package:wow_english/common/core/app_config_helper.dart'; | @@ -4,6 +4,7 @@ import 'package:wow_english/common/core/app_config_helper.dart'; | ||
4 | import 'package:wow_english/common/extension/string_extension.dart'; | 4 | import 'package:wow_english/common/extension/string_extension.dart'; |
5 | import 'package:wow_english/pages/moduleSelect/state.dart'; | 5 | import 'package:wow_english/pages/moduleSelect/state.dart'; |
6 | import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; | 6 | import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; |
7 | +import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | ||
7 | 8 | ||
8 | import '../../common/core/user_util.dart'; | 9 | import '../../common/core/user_util.dart'; |
9 | import '../../common/dialogs/show_dialog.dart'; | 10 | import '../../common/dialogs/show_dialog.dart'; |
@@ -27,16 +28,18 @@ class ModuleSelectPage extends StatelessWidget { | @@ -27,16 +28,18 @@ class ModuleSelectPage extends StatelessWidget { | ||
27 | class _HomePageView extends StatelessWidget { | 28 | class _HomePageView extends StatelessWidget { |
28 | @override | 29 | @override |
29 | Widget build(BuildContext context) { | 30 | Widget build(BuildContext context) { |
30 | - final bloc = BlocProvider.of<ModuleSelectBloc>(context); | ||
31 | - return BlocListener<ModuleSelectBloc, ModuleSelectState>( | ||
32 | - listener: (context, state) {}, | ||
33 | - child: _homeView(), | ||
34 | - ); | 31 | + return MultiBlocListener(listeners: [ |
32 | + BlocListener<UserBloc, UserState>(listener: (context, state) { | ||
33 | + debugPrint('WQF ModuleSelectPage BlocListener state: $state'); | ||
34 | + }), | ||
35 | + BlocListener<ModuleSelectBloc, ModuleSelectState>( | ||
36 | + listener: (context, state) {}, | ||
37 | + ), | ||
38 | + ], child: _homeView()); | ||
35 | } | 39 | } |
36 | 40 | ||
37 | Widget _homeView() => BlocBuilder<ModuleSelectBloc, ModuleSelectState>( | 41 | Widget _homeView() => BlocBuilder<ModuleSelectBloc, ModuleSelectState>( |
38 | builder: (context, state) { | 42 | builder: (context, state) { |
39 | - final bloc = BlocProvider.of<ModuleSelectBloc>(context); | ||
40 | return Scaffold( | 43 | return Scaffold( |
41 | body: Container( | 44 | body: Container( |
42 | color: Colors.white, | 45 | color: Colors.white, |
@@ -79,46 +82,55 @@ class _HomePageView extends StatelessWidget { | @@ -79,46 +82,55 @@ class _HomePageView extends StatelessWidget { | ||
79 | ), | 82 | ), |
80 | ), | 83 | ), |
81 | Expanded( | 84 | Expanded( |
82 | - child: GestureDetector( | ||
83 | - onTap: () { | ||
84 | - //如果没登录先登录 | ||
85 | - if (UserUtil.isLogined()) { | ||
86 | - if (AppConfigHelper.shouldHidePay()) { | ||
87 | - pushNamed(AppRouteName.games); | ||
88 | - } else { | ||
89 | - if (UserUtil.hasGamePermission()) { | 85 | + child: BlocBuilder<UserBloc, UserState>( |
86 | + builder: (context, userState) { | ||
87 | + final userBloc = BlocProvider.of<UserBloc>(context); | ||
88 | + debugPrint( | ||
89 | + 'WQF ModuleSelectPage BlocBuilder state: $userState'); | ||
90 | + return GestureDetector( | ||
91 | + onTap: () { | ||
92 | + //如果没登录先登录 | ||
93 | + if (UserUtil.isLogined()) { | ||
94 | + if (AppConfigHelper.shouldHidePay()) { | ||
90 | pushNamed(AppRouteName.games); | 95 | pushNamed(AppRouteName.games); |
91 | } else { | 96 | } else { |
92 | - showTwoActionDialog( | ||
93 | - '提示', '忽略', '去续费', | ||
94 | - '您的课程已到期,请快快续费继续学习吧!', leftTap: () { | ||
95 | - popPage(); | ||
96 | - }, rightTap: () { | ||
97 | - popPage(); | ||
98 | - pushNamed(AppRouteName.shop); | ||
99 | - }); | 97 | + if (UserUtil.hasGamePermission()) { |
98 | + pushNamed(AppRouteName.games); | ||
99 | + } else { | ||
100 | + showTwoActionDialog('提示', '忽略', '去续费', | ||
101 | + '您的课程已到期,请快快续费继续学习吧!', leftTap: () { | ||
102 | + popPage(); | ||
103 | + }, rightTap: () { | ||
104 | + popPage(); | ||
105 | + pushNamed(AppRouteName.shop); | ||
106 | + }); | ||
107 | + } | ||
100 | } | 108 | } |
109 | + } else { | ||
110 | + pushNamed(AppRouteName.login); | ||
101 | } | 111 | } |
102 | - } else { | ||
103 | - pushNamed(AppRouteName.login); | ||
104 | - } | ||
105 | - }, | ||
106 | - child: Column( | ||
107 | - mainAxisAlignment: MainAxisAlignment.center, | ||
108 | - children: [ | ||
109 | - Stack( | ||
110 | - alignment: AlignmentDirectional.center, | ||
111 | - children: [ | ||
112 | - Image.asset('bg_frame_module'.assetPng, | ||
113 | - width: 162.5.w, height: 203.5.h), | ||
114 | - Image.asset('pic_module_game'.assetPng, | ||
115 | - width: 140.5.w, height: 172.h) | ||
116 | - ]), | ||
117 | - 10.verticalSpace, | ||
118 | - Image.asset('label_module_game'.assetPng, | ||
119 | - width: 124.w, height: 34.h), | ||
120 | - ], | ||
121 | - )), | 112 | + }, |
113 | + child: Column( | ||
114 | + mainAxisAlignment: MainAxisAlignment.center, | ||
115 | + children: [ | ||
116 | + Stack( | ||
117 | + alignment: AlignmentDirectional.center, | ||
118 | + children: [ | ||
119 | + Image.asset( | ||
120 | + 'bg_frame_module'.assetPng, | ||
121 | + width: 162.5.w, | ||
122 | + height: 203.5.h), | ||
123 | + Image.asset( | ||
124 | + 'pic_module_game'.assetPng, | ||
125 | + width: 140.5.w, | ||
126 | + height: 172.h) | ||
127 | + ]), | ||
128 | + 10.verticalSpace, | ||
129 | + Image.asset('label_module_game'.assetPng, | ||
130 | + width: 124.w, height: 34.h), | ||
131 | + ], | ||
132 | + )); | ||
133 | + }), | ||
122 | ), | 134 | ), |
123 | ], | 135 | ], |
124 | ), | 136 | ), |
lib/pages/shopping/view.dart
1 | -import 'package:cached_network_image/cached_network_image.dart'; | ||
2 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
3 | import 'package:flutter_bloc/flutter_bloc.dart'; | 2 | import 'package:flutter_bloc/flutter_bloc.dart'; |
4 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 3 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
@@ -8,6 +7,7 @@ import 'package:wow_english/models/product_entity.dart'; | @@ -8,6 +7,7 @@ import 'package:wow_english/models/product_entity.dart'; | ||
8 | import '../../common/core/assets_const.dart'; | 7 | import '../../common/core/assets_const.dart'; |
9 | import '../../common/widgets/we_app_bar.dart'; | 8 | import '../../common/widgets/we_app_bar.dart'; |
10 | import '../../utils/image_util.dart'; | 9 | import '../../utils/image_util.dart'; |
10 | +import '../user/bloc/user_bloc.dart'; | ||
11 | import 'bloc.dart'; | 11 | import 'bloc.dart'; |
12 | import 'event.dart'; | 12 | import 'event.dart'; |
13 | import 'state.dart'; | 13 | import 'state.dart'; |
@@ -65,9 +65,11 @@ class _ShoppingView extends StatelessWidget { | @@ -65,9 +65,11 @@ class _ShoppingView extends StatelessWidget { | ||
65 | @override | 65 | @override |
66 | Widget build(BuildContext context) { | 66 | Widget build(BuildContext context) { |
67 | final bloc = BlocProvider.of<ShoppingBloc>(context); | 67 | final bloc = BlocProvider.of<ShoppingBloc>(context); |
68 | + final userBloc = BlocProvider.of<UserBloc>(context); | ||
68 | return BlocListener<ShoppingBloc, ShoppingState>( | 69 | return BlocListener<ShoppingBloc, ShoppingState>( |
69 | listener: (context, state) { | 70 | listener: (context, state) { |
70 | if (state is PaySuccessState) { | 71 | if (state is PaySuccessState) { |
72 | + userBloc.add(PayStateChangeEvent()); | ||
71 | Navigator.pop(context); | 73 | Navigator.pop(context); |
72 | } | 74 | } |
73 | }, | 75 | }, |
lib/pages/user/bloc/user_bloc.dart
@@ -12,12 +12,16 @@ part 'user_state.dart'; | @@ -12,12 +12,16 @@ part 'user_state.dart'; | ||
12 | class UserBloc extends Bloc<UserEvent, UserState> { | 12 | class UserBloc extends Bloc<UserEvent, UserState> { |
13 | final TextEditingController modifyTextController = TextEditingController(); | 13 | final TextEditingController modifyTextController = TextEditingController(); |
14 | int tempGender = 0; | 14 | int tempGender = 0; |
15 | + UserEntity? _userEntityForPay; | ||
16 | + | ||
17 | + UserEntity? get userEntityForPay => _userEntityForPay; | ||
15 | 18 | ||
16 | UserBloc() : super(UserInitial()) { | 19 | UserBloc() : super(UserInitial()) { |
17 | on<UserLogout>(_logout); | 20 | on<UserLogout>(_logout); |
18 | on<UserDelete>(_deleteAccount); | 21 | on<UserDelete>(_deleteAccount); |
19 | on<UserUpdate>(_updateUser); | 22 | on<UserUpdate>(_updateUser); |
20 | on<UserUIUpdate>(_updateUIUser); | 23 | on<UserUIUpdate>(_updateUIUser); |
24 | + on<PayStateChangeEvent>(_patStateChanged); | ||
21 | } | 25 | } |
22 | 26 | ||
23 | void _logout(UserLogout event, Emitter<UserState> emitter) async { | 27 | void _logout(UserLogout event, Emitter<UserState> emitter) async { |
@@ -78,4 +82,17 @@ class UserBloc extends Bloc<UserEvent, UserState> { | @@ -78,4 +82,17 @@ class UserBloc extends Bloc<UserEvent, UserState> { | ||
78 | Log.e('修改个人信息失败: $e'); | 82 | Log.e('修改个人信息失败: $e'); |
79 | } | 83 | } |
80 | } | 84 | } |
85 | + | ||
86 | + //支付状态变化 | ||
87 | + void _patStateChanged(PayStateChangeEvent event, Emitter<UserState> emitter) async { | ||
88 | + // 由于userInfo接口不会返回token,所以这里需要再次保存一下token | ||
89 | + final token = UserUtil.getUser()?.token; | ||
90 | + _userEntityForPay = await UserDao.getUserInfo(); | ||
91 | + if (_userEntityForPay == null) { | ||
92 | + return; | ||
93 | + } | ||
94 | + _userEntityForPay?.token = token; | ||
95 | + UserUtil.saveUser(_userEntityForPay); | ||
96 | + emitter(UserPayStateChangedState()); | ||
97 | + } | ||
81 | } | 98 | } |
lib/pages/user/bloc/user_event.dart
@@ -22,3 +22,5 @@ class UserUIUpdate extends UserEvent { | @@ -22,3 +22,5 @@ class UserUIUpdate extends UserEvent { | ||
22 | 22 | ||
23 | UserUIUpdate(this.type); | 23 | UserUIUpdate(this.type); |
24 | } | 24 | } |
25 | + | ||
26 | +class PayStateChangeEvent extends UserEvent {} | ||
25 | \ No newline at end of file | 27 | \ No newline at end of file |
lib/pages/user/bloc/user_state.dart
@@ -5,3 +5,5 @@ sealed class UserState {} | @@ -5,3 +5,5 @@ sealed class UserState {} | ||
5 | class UserInitial extends UserState {} | 5 | class UserInitial extends UserState {} |
6 | 6 | ||
7 | class UserInfoUpdated extends UserState {} | 7 | class UserInfoUpdated extends UserState {} |
8 | + | ||
9 | +class UserPayStateChangedState extends UserState {} |