Commit 278208b8573ecc4d18c2f4576a8e448c4f7e0a5a
1 parent
578f1729
feat:1、用户访问权限调整;2、添加游戏访问权限
Showing
9 changed files
with
81 additions
and
21 deletions
lib/app/splash_page.dart
@@ -45,8 +45,8 @@ class _TransitionViewState extends State<TransitionView> { | @@ -45,8 +45,8 @@ class _TransitionViewState extends State<TransitionView> { | ||
45 | Log.d('Splash读本地, userEntity: $userEntity'); | 45 | Log.d('Splash读本地, userEntity: $userEntity'); |
46 | int apartInMilliseconds = 0; | 46 | int apartInMilliseconds = 0; |
47 | // 调一下接口判断一下有效性再往下 | 47 | // 调一下接口判断一下有效性再往下 |
48 | - if (userEntity != null) { | ||
49 | - String token = userEntity.token; | 48 | + if (userEntity != null && userEntity.token != null) { |
49 | + String token = userEntity.token!; | ||
50 | DateTime startTime = DateTime.now(); | 50 | DateTime startTime = DateTime.now(); |
51 | try { | 51 | try { |
52 | userEntity = await UserDao.getUserInfo(); | 52 | userEntity = await UserDao.getUserInfo(); |
lib/common/core/user_util.dart
@@ -11,8 +11,6 @@ import 'package:wow_english/utils/sp_util.dart'; | @@ -11,8 +11,6 @@ import 'package:wow_english/utils/sp_util.dart'; | ||
11 | class UserUtil { | 11 | class UserUtil { |
12 | static UserEntity? _userEntity; | 12 | static UserEntity? _userEntity; |
13 | 13 | ||
14 | - static String get token => _userEntity?.token ?? ''; | ||
15 | - | ||
16 | static void saveUser(UserEntity? user) { | 14 | static void saveUser(UserEntity? user) { |
17 | if (user == null) { | 15 | if (user == null) { |
18 | _clearUserData(); | 16 | _clearUserData(); |
@@ -64,4 +62,18 @@ class UserUtil { | @@ -64,4 +62,18 @@ class UserUtil { | ||
64 | }*/ | 62 | }*/ |
65 | Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false, arguments: {'showPasswordPage': showPasswordLoginPage}); | 63 | Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false, arguments: {'showPasswordPage': showPasswordLoginPage}); |
66 | } | 64 | } |
65 | + | ||
66 | + // 是否有游戏权限 | ||
67 | + static bool hasGamePermission() { | ||
68 | + return _userEntity?.valid ?? false; | ||
69 | + } | ||
70 | + | ||
71 | + // 是否登录(token是否有效) | ||
72 | + static bool isLogined() { | ||
73 | + return getUserToken().isNotEmpty; | ||
74 | + } | ||
75 | + | ||
76 | + static String getUserToken() { | ||
77 | + return _userEntity?.token ?? ''; | ||
78 | + } | ||
67 | } | 79 | } |
lib/common/request/dao/user_dao.dart
@@ -16,6 +16,12 @@ class UserDao { | @@ -16,6 +16,12 @@ class UserDao { | ||
16 | ); | 16 | ); |
17 | if (data != null) { | 17 | if (data != null) { |
18 | UserUtil.saveUser(data); | 18 | UserUtil.saveUser(data); |
19 | + // 由于userInfo接口不会返回token,所以这里需要再次保存一下token | ||
20 | + final token = data.token; | ||
21 | + //登录成功后zip一下getUserInfo,因为进入首页需要的信息在userinfo里,保证进入首页数据是最新的 | ||
22 | + data = await getUserInfo(); | ||
23 | + data?.token = token; | ||
24 | + UserUtil.saveUser(data); | ||
19 | } | 25 | } |
20 | return data; | 26 | return data; |
21 | } | 27 | } |
lib/common/request/token_interceptor.dart
@@ -5,8 +5,8 @@ class TokenInterceptor extends Interceptor { | @@ -5,8 +5,8 @@ class TokenInterceptor extends Interceptor { | ||
5 | @override | 5 | @override |
6 | void onRequest(RequestOptions options, RequestInterceptorHandler handler) { | 6 | void onRequest(RequestOptions options, RequestInterceptorHandler handler) { |
7 | // 判断token不为空插入, todo token的取法应该跟user在一起,这里取不到user | 7 | // 判断token不为空插入, todo token的取法应该跟user在一起,这里取不到user |
8 | - if (UserUtil.token.isNotEmpty) { | ||
9 | - options.headers["Auth-token"] = UserUtil.token; | 8 | + if (UserUtil.isLogined()) { |
9 | + options.headers["Auth-token"] = UserUtil.getUserToken(); | ||
10 | } | 10 | } |
11 | options.headers["version"] = '1.0.0'; | 11 | options.headers["version"] = '1.0.0'; |
12 | super.onRequest(options, handler); | 12 | super.onRequest(options, handler); |
lib/generated/json/user_entity.g.dart
@@ -45,6 +45,14 @@ UserEntity $UserEntityFromJson(Map<String, dynamic> json) { | @@ -45,6 +45,14 @@ UserEntity $UserEntityFromJson(Map<String, dynamic> json) { | ||
45 | if (effectiveDate != null) { | 45 | if (effectiveDate != null) { |
46 | userEntity.effectiveDate = effectiveDate; | 46 | userEntity.effectiveDate = effectiveDate; |
47 | } | 47 | } |
48 | + final int? validDay = jsonConvert.convert<int>(json['validDay']); | ||
49 | + if (validDay != null) { | ||
50 | + userEntity.validDay = validDay; | ||
51 | + } | ||
52 | + final bool? valid = jsonConvert.convert<bool>(json['valid']); | ||
53 | + if (valid != null) { | ||
54 | + userEntity.valid = valid; | ||
55 | + } | ||
48 | return userEntity; | 56 | return userEntity; |
49 | } | 57 | } |
50 | 58 | ||
@@ -60,6 +68,8 @@ Map<String, dynamic> $UserEntityToJson(UserEntity entity) { | @@ -60,6 +68,8 @@ Map<String, dynamic> $UserEntityToJson(UserEntity entity) { | ||
60 | data['fillUserInfo'] = entity.fillUserInfo; | 68 | data['fillUserInfo'] = entity.fillUserInfo; |
61 | data['nowCourseModuleId'] = entity.nowCourseModuleId; | 69 | data['nowCourseModuleId'] = entity.nowCourseModuleId; |
62 | data['effectiveDate'] = entity.effectiveDate; | 70 | data['effectiveDate'] = entity.effectiveDate; |
71 | + data['validDay'] = entity.validDay; | ||
72 | + data['valid'] = entity.valid; | ||
63 | return data; | 73 | return data; |
64 | } | 74 | } |
65 | 75 | ||
@@ -75,6 +85,8 @@ extension UserEntityExtension on UserEntity { | @@ -75,6 +85,8 @@ extension UserEntityExtension on UserEntity { | ||
75 | int? fillUserInfo, | 85 | int? fillUserInfo, |
76 | int? nowCourseModuleId, | 86 | int? nowCourseModuleId, |
77 | String? effectiveDate, | 87 | String? effectiveDate, |
88 | + int? validDay, | ||
89 | + bool? valid, | ||
78 | }) { | 90 | }) { |
79 | return UserEntity() | 91 | return UserEntity() |
80 | ..id = id ?? this.id | 92 | ..id = id ?? this.id |
@@ -86,6 +98,8 @@ extension UserEntityExtension on UserEntity { | @@ -86,6 +98,8 @@ extension UserEntityExtension on UserEntity { | ||
86 | ..phoneNum = phoneNum ?? this.phoneNum | 98 | ..phoneNum = phoneNum ?? this.phoneNum |
87 | ..fillUserInfo = fillUserInfo ?? this.fillUserInfo | 99 | ..fillUserInfo = fillUserInfo ?? this.fillUserInfo |
88 | ..nowCourseModuleId = nowCourseModuleId ?? this.nowCourseModuleId | 100 | ..nowCourseModuleId = nowCourseModuleId ?? this.nowCourseModuleId |
89 | - ..effectiveDate = effectiveDate ?? this.effectiveDate; | 101 | + ..effectiveDate = effectiveDate ?? this.effectiveDate |
102 | + ..validDay = validDay ?? this.validDay | ||
103 | + ..valid = valid ?? this.valid; | ||
90 | } | 104 | } |
91 | } | 105 | } |
92 | \ No newline at end of file | 106 | \ No newline at end of file |
lib/models/user_entity.dart
@@ -9,7 +9,7 @@ class UserEntity { | @@ -9,7 +9,7 @@ class UserEntity { | ||
9 | late String name; | 9 | late String name; |
10 | 10 | ||
11 | /// 一定有也必须要有 | 11 | /// 一定有也必须要有 |
12 | - late String token; | 12 | + String? token; |
13 | 13 | ||
14 | //late int expireTime; | 14 | //late int expireTime; |
15 | 15 | ||
@@ -29,6 +29,12 @@ class UserEntity { | @@ -29,6 +29,12 @@ class UserEntity { | ||
29 | /// 有效时间,VIP,为null没有 | 29 | /// 有效时间,VIP,为null没有 |
30 | String? effectiveDate; | 30 | String? effectiveDate; |
31 | 31 | ||
32 | + /// 有效天数 | ||
33 | + int? validDay; | ||
34 | + | ||
35 | + /// 游戏权限 | ||
36 | + bool? valid; | ||
37 | + | ||
32 | UserEntity(); | 38 | UserEntity(); |
33 | 39 | ||
34 | factory UserEntity.fromJson(Map<String, dynamic> json) => $UserEntityFromJson(json); | 40 | factory UserEntity.fromJson(Map<String, dynamic> json) => $UserEntityFromJson(json); |
lib/pages/home/home_page.dart
@@ -33,20 +33,20 @@ class _HomePageView extends StatelessWidget { | @@ -33,20 +33,20 @@ class _HomePageView extends StatelessWidget { | ||
33 | if (type == HeaderActionType.video) { | 33 | if (type == HeaderActionType.video) { |
34 | pushNamed(AppRouteName.reAfter); | 34 | pushNamed(AppRouteName.reAfter); |
35 | } else if (type == HeaderActionType.phase) { | 35 | } else if (type == HeaderActionType.phase) { |
36 | - if(UserUtil.token.isEmpty) { | ||
37 | - pushNamed(AppRouteName.login); | ||
38 | - } else { | 36 | + if (UserUtil.isLogined()) { |
39 | pushNamed(AppRouteName.lesson); | 37 | pushNamed(AppRouteName.lesson); |
38 | + } else { | ||
39 | + pushNamed(AppRouteName.login); | ||
40 | } | 40 | } |
41 | } else if (type == HeaderActionType.listen) { | 41 | } else if (type == HeaderActionType.listen) { |
42 | pushNamed(AppRouteName.listen); | 42 | pushNamed(AppRouteName.listen); |
43 | } else if (type == HeaderActionType.shop) { | 43 | } else if (type == HeaderActionType.shop) { |
44 | pushNamed(AppRouteName.shop); | 44 | pushNamed(AppRouteName.shop); |
45 | } else if (type == HeaderActionType.user) { | 45 | } else if (type == HeaderActionType.user) { |
46 | - if(UserUtil.token.isEmpty) { | ||
47 | - pushNamed(AppRouteName.login); | ||
48 | - } else { | 46 | + if (UserUtil.isLogined()) { |
49 | pushNamed(AppRouteName.user); | 47 | pushNamed(AppRouteName.user); |
48 | + } else { | ||
49 | + pushNamed(AppRouteName.login); | ||
50 | } | 50 | } |
51 | } else { | 51 | } else { |
52 | 52 | ||
@@ -155,7 +155,7 @@ class _HomePageView extends StatelessWidget { | @@ -155,7 +155,7 @@ class _HomePageView extends StatelessWidget { | ||
155 | //彩蛋 | 155 | //彩蛋 |
156 | return GestureDetector( | 156 | return GestureDetector( |
157 | onTap: () { | 157 | onTap: () { |
158 | - if(UserUtil.token.isEmpty) { | 158 | + if (!UserUtil.isLogined()) { |
159 | pushNamed(AppRouteName.login); | 159 | pushNamed(AppRouteName.login); |
160 | return; | 160 | return; |
161 | } | 161 | } |
@@ -173,7 +173,7 @@ class _HomePageView extends StatelessWidget { | @@ -173,7 +173,7 @@ class _HomePageView extends StatelessWidget { | ||
173 | } else { | 173 | } else { |
174 | return GestureDetector( | 174 | return GestureDetector( |
175 | onTap: () { | 175 | onTap: () { |
176 | - if(UserUtil.token.isEmpty) { | 176 | + if (!UserUtil.isLogined()) { |
177 | pushNamed(AppRouteName.login); | 177 | pushNamed(AppRouteName.login); |
178 | return; | 178 | return; |
179 | } | 179 | } |
lib/pages/moduleSelect/view.dart
@@ -4,6 +4,8 @@ import 'package:wow_english/common/extension/string_extension.dart'; | @@ -4,6 +4,8 @@ import 'package:wow_english/common/extension/string_extension.dart'; | ||
4 | import 'package:wow_english/pages/moduleSelect/state.dart'; | 4 | import 'package:wow_english/pages/moduleSelect/state.dart'; |
5 | import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; | 5 | import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; |
6 | 6 | ||
7 | +import '../../common/core/user_util.dart'; | ||
8 | +import '../../common/dialogs/show_dialog.dart'; | ||
7 | import 'bloc.dart'; | 9 | import 'bloc.dart'; |
8 | import 'event.dart'; | 10 | import 'event.dart'; |
9 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 11 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
@@ -47,7 +49,11 @@ class _HomePageView extends StatelessWidget { | @@ -47,7 +49,11 @@ class _HomePageView extends StatelessWidget { | ||
47 | Expanded( | 49 | Expanded( |
48 | child: GestureDetector( | 50 | child: GestureDetector( |
49 | onTap: () { | 51 | onTap: () { |
50 | - pushNamed(AppRouteName.home); | 52 | + if (UserUtil.isLogined()) { |
53 | + pushNamed(AppRouteName.home); | ||
54 | + } else { | ||
55 | + pushNamed(AppRouteName.login); | ||
56 | + } | ||
51 | }, | 57 | }, |
52 | child: Column( | 58 | child: Column( |
53 | mainAxisAlignment: MainAxisAlignment.center, | 59 | mainAxisAlignment: MainAxisAlignment.center, |
@@ -74,7 +80,23 @@ class _HomePageView extends StatelessWidget { | @@ -74,7 +80,23 @@ class _HomePageView extends StatelessWidget { | ||
74 | Expanded( | 80 | Expanded( |
75 | child: GestureDetector( | 81 | child: GestureDetector( |
76 | onTap: () { | 82 | onTap: () { |
77 | - pushNamed(AppRouteName.games); | 83 | + //如果没登录先登录 |
84 | + if (UserUtil.isLogined()) { | ||
85 | + if (UserUtil.hasGamePermission()) { | ||
86 | + pushNamed(AppRouteName.games); | ||
87 | + } else { | ||
88 | + showTwoActionDialog( | ||
89 | + '提示', '忽略', '去续费', | ||
90 | + '您的课程已到期,请快快续费继续学习吧!', leftTap: () { | ||
91 | + popPage(); | ||
92 | + }, rightTap: () { | ||
93 | + popPage(); | ||
94 | + pushNamed(AppRouteName.shop); | ||
95 | + }); | ||
96 | + } | ||
97 | + } else { | ||
98 | + pushNamed(AppRouteName.login); | ||
99 | + } | ||
78 | }, | 100 | }, |
79 | child: Column( | 101 | child: Column( |
80 | mainAxisAlignment: MainAxisAlignment.center, | 102 | mainAxisAlignment: MainAxisAlignment.center, |
lib/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart
@@ -96,9 +96,9 @@ class BaseHomeHeaderWidget extends StatelessWidget { | @@ -96,9 +96,9 @@ class BaseHomeHeaderWidget extends StatelessWidget { | ||
96 | } | 96 | } |
97 | 97 | ||
98 | void onUserClick() { | 98 | void onUserClick() { |
99 | - if (UserUtil.token.isEmpty) { | ||
100 | - pushNamed(AppRouteName.login); | ||
101 | - } else { | 99 | + if (UserUtil.isLogined()) { |
102 | pushNamed(AppRouteName.user); | 100 | pushNamed(AppRouteName.user); |
101 | + } else { | ||
102 | + pushNamed(AppRouteName.login); | ||
103 | } | 103 | } |
104 | } | 104 | } |