Commit 278208b8573ecc4d18c2f4576a8e448c4f7e0a5a

Authored by 吴启风
1 parent 578f1729

feat:1、用户访问权限调整;2、添加游戏访问权限

lib/app/splash_page.dart
... ... @@ -45,8 +45,8 @@ class _TransitionViewState extends State<TransitionView> {
45 45 Log.d('Splash读本地, userEntity: $userEntity');
46 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 50 DateTime startTime = DateTime.now();
51 51 try {
52 52 userEntity = await UserDao.getUserInfo();
... ...
lib/common/core/user_util.dart
... ... @@ -11,8 +11,6 @@ import 'package:wow_english/utils/sp_util.dart';
11 11 class UserUtil {
12 12 static UserEntity? _userEntity;
13 13  
14   - static String get token => _userEntity?.token ?? '';
15   -
16 14 static void saveUser(UserEntity? user) {
17 15 if (user == null) {
18 16 _clearUserData();
... ... @@ -64,4 +62,18 @@ class UserUtil {
64 62 }*/
65 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 16 );
17 17 if (data != null) {
18 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 26 return data;
21 27 }
... ...
lib/common/request/token_interceptor.dart
... ... @@ -5,8 +5,8 @@ class TokenInterceptor extends Interceptor {
5 5 @override
6 6 void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
7 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 11 options.headers["version"] = '1.0.0';
12 12 super.onRequest(options, handler);
... ...
lib/generated/json/user_entity.g.dart
... ... @@ -45,6 +45,14 @@ UserEntity $UserEntityFromJson(Map<String, dynamic> json) {
45 45 if (effectiveDate != null) {
46 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 56 return userEntity;
49 57 }
50 58  
... ... @@ -60,6 +68,8 @@ Map&lt;String, dynamic&gt; $UserEntityToJson(UserEntity entity) {
60 68 data['fillUserInfo'] = entity.fillUserInfo;
61 69 data['nowCourseModuleId'] = entity.nowCourseModuleId;
62 70 data['effectiveDate'] = entity.effectiveDate;
  71 + data['validDay'] = entity.validDay;
  72 + data['valid'] = entity.valid;
63 73 return data;
64 74 }
65 75  
... ... @@ -75,6 +85,8 @@ extension UserEntityExtension on UserEntity {
75 85 int? fillUserInfo,
76 86 int? nowCourseModuleId,
77 87 String? effectiveDate,
  88 + int? validDay,
  89 + bool? valid,
78 90 }) {
79 91 return UserEntity()
80 92 ..id = id ?? this.id
... ... @@ -86,6 +98,8 @@ extension UserEntityExtension on UserEntity {
86 98 ..phoneNum = phoneNum ?? this.phoneNum
87 99 ..fillUserInfo = fillUserInfo ?? this.fillUserInfo
88 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 106 \ No newline at end of file
... ...
lib/models/user_entity.dart
... ... @@ -9,7 +9,7 @@ class UserEntity {
9 9 late String name;
10 10  
11 11 /// 一定有也必须要有
12   - late String token;
  12 + String? token;
13 13  
14 14 //late int expireTime;
15 15  
... ... @@ -29,6 +29,12 @@ class UserEntity {
29 29 /// 有效时间,VIP,为null没有
30 30 String? effectiveDate;
31 31  
  32 + /// 有效天数
  33 + int? validDay;
  34 +
  35 + /// 游戏权限
  36 + bool? valid;
  37 +
32 38 UserEntity();
33 39  
34 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 33 if (type == HeaderActionType.video) {
34 34 pushNamed(AppRouteName.reAfter);
35 35 } else if (type == HeaderActionType.phase) {
36   - if(UserUtil.token.isEmpty) {
37   - pushNamed(AppRouteName.login);
38   - } else {
  36 + if (UserUtil.isLogined()) {
39 37 pushNamed(AppRouteName.lesson);
  38 + } else {
  39 + pushNamed(AppRouteName.login);
40 40 }
41 41 } else if (type == HeaderActionType.listen) {
42 42 pushNamed(AppRouteName.listen);
43 43 } else if (type == HeaderActionType.shop) {
44 44 pushNamed(AppRouteName.shop);
45 45 } else if (type == HeaderActionType.user) {
46   - if(UserUtil.token.isEmpty) {
47   - pushNamed(AppRouteName.login);
48   - } else {
  46 + if (UserUtil.isLogined()) {
49 47 pushNamed(AppRouteName.user);
  48 + } else {
  49 + pushNamed(AppRouteName.login);
50 50 }
51 51 } else {
52 52  
... ... @@ -155,7 +155,7 @@ class _HomePageView extends StatelessWidget {
155 155 //彩蛋
156 156 return GestureDetector(
157 157 onTap: () {
158   - if(UserUtil.token.isEmpty) {
  158 + if (!UserUtil.isLogined()) {
159 159 pushNamed(AppRouteName.login);
160 160 return;
161 161 }
... ... @@ -173,7 +173,7 @@ class _HomePageView extends StatelessWidget {
173 173 } else {
174 174 return GestureDetector(
175 175 onTap: () {
176   - if(UserUtil.token.isEmpty) {
  176 + if (!UserUtil.isLogined()) {
177 177 pushNamed(AppRouteName.login);
178 178 return;
179 179 }
... ...
lib/pages/moduleSelect/view.dart
... ... @@ -4,6 +4,8 @@ import &#39;package:wow_english/common/extension/string_extension.dart&#39;;
4 4 import 'package:wow_english/pages/moduleSelect/state.dart';
5 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 9 import 'bloc.dart';
8 10 import 'event.dart';
9 11 import 'package:flutter_screenutil/flutter_screenutil.dart';
... ... @@ -47,7 +49,11 @@ class _HomePageView extends StatelessWidget {
47 49 Expanded(
48 50 child: GestureDetector(
49 51 onTap: () {
50   - pushNamed(AppRouteName.home);
  52 + if (UserUtil.isLogined()) {
  53 + pushNamed(AppRouteName.home);
  54 + } else {
  55 + pushNamed(AppRouteName.login);
  56 + }
51 57 },
52 58 child: Column(
53 59 mainAxisAlignment: MainAxisAlignment.center,
... ... @@ -74,7 +80,23 @@ class _HomePageView extends StatelessWidget {
74 80 Expanded(
75 81 child: GestureDetector(
76 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 101 child: Column(
80 102 mainAxisAlignment: MainAxisAlignment.center,
... ...
lib/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart
... ... @@ -96,9 +96,9 @@ class BaseHomeHeaderWidget extends StatelessWidget {
96 96 }
97 97  
98 98 void onUserClick() {
99   - if (UserUtil.token.isEmpty) {
100   - pushNamed(AppRouteName.login);
101   - } else {
  99 + if (UserUtil.isLogined()) {
102 100 pushNamed(AppRouteName.user);
  101 + } else {
  102 + pushNamed(AppRouteName.login);
103 103 }
104 104 }
... ...