Commit e55bbdf3e9c2e15793aadb445e46b0db70c336d2
1 parent
20345cbf
fixed: aliyun oss private->public read
fixed: login refresh user info
Showing
7 changed files
with
80 additions
and
33 deletions
lib/app/splash_page.dart
... | ... | @@ -9,6 +9,7 @@ import 'package:limiting_direction_csx/limiting_direction_csx.dart'; |
9 | 9 | import 'package:wow_english/common/core/user_util.dart'; |
10 | 10 | import 'package:wow_english/common/extension/string_extension.dart'; |
11 | 11 | import 'package:wow_english/common/request/config.dart'; |
12 | +import 'package:wow_english/common/request/dao/user_dao.dart'; | |
12 | 13 | import 'package:wow_english/models/user_entity.dart'; |
13 | 14 | import 'package:wow_english/route/route.dart'; |
14 | 15 | import 'package:wow_english/utils/log_util.dart'; |
... | ... | @@ -38,23 +39,30 @@ class _TransitionViewState extends State<TransitionView> { |
38 | 39 | UserEntity? userEntity = UserUtil.getUser(); |
39 | 40 | Log.d('当前模式:kDebugMode=$kDebugMode, kProfileMode=$kProfileMode, kReleaseMode=$kReleaseMode'); |
40 | 41 | Log.d('当前API地址:${RequestConfig.baseUrl}'); |
41 | - if (kDebugMode) { | |
42 | - Log.d('Splash读本地userEntity: $userEntity'); | |
43 | - } | |
42 | + //BuildContext context = Navigator.of(context).context; | |
43 | + //var currentPageName = ModalRoute.of(Navigator.of(AppRouter.context))?.settings.name; | |
44 | + //Log.d('Splash读当前页面:$currentPageName'); | |
45 | + Log.d('Splash读本地, userEntity: $userEntity'); | |
44 | 46 | int apartInMilliseconds = 0; |
45 | 47 | // 调一下接口判断一下有效性再往下 |
46 | 48 | if (userEntity != null) { |
49 | + String token = userEntity.token; | |
47 | 50 | DateTime startTime = DateTime.now(); |
48 | - // try { | |
49 | - // userEntity = await UserDao.getUserInfo(); | |
50 | - // UserUtil.saveUser(userEntity); | |
51 | - // } catch (e) { | |
52 | - // e.logE(); | |
53 | - // } | |
51 | + try { | |
52 | + userEntity = await UserDao.getUserInfo(); | |
53 | + Log.d('Splash在线更新, userEntity: $userEntity'); | |
54 | + if (userEntity != null) { | |
55 | + userEntity.token = token; | |
56 | + Log.d('Splash重设token, userEntity: $userEntity'); | |
57 | + UserUtil.saveUser(userEntity); | |
58 | + } | |
59 | + } catch (e) { | |
60 | + e.logE(); | |
61 | + } | |
54 | 62 | apartInMilliseconds = DateTime.now().difference(startTime).inMilliseconds; |
55 | 63 | } |
56 | - Log.d('Splash getUserInfo 耗时:${apartInMilliseconds}ms'); | |
57 | 64 | int duration = max(2000 - apartInMilliseconds, 0); |
65 | + Log.d('Splash getUserInfo 耗时:${apartInMilliseconds}ms, 最终duration=$duration'); | |
58 | 66 | Timer(Duration(milliseconds: duration), () { |
59 | 67 | /*if (userEntity != null) { |
60 | 68 | pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); | ... | ... |
lib/common/core/user_util.dart
... | ... | @@ -2,6 +2,7 @@ import 'dart:convert'; |
2 | 2 | |
3 | 3 | import 'package:flutter/foundation.dart'; |
4 | 4 | import 'package:flutter/material.dart'; |
5 | +import 'package:flutter/widgets.dart'; | |
5 | 6 | import 'package:wow_english/common/core/sp_const.dart'; |
6 | 7 | import 'package:wow_english/models/user_entity.dart'; |
7 | 8 | import 'package:wow_english/route/route.dart'; |
... | ... | @@ -55,6 +56,12 @@ class UserUtil { |
55 | 56 | |
56 | 57 | static void logout() { |
57 | 58 | _clearUserData(); |
59 | + // 判断下不在Splash页就跳转 | |
60 | + /*var currentPageName = ModalRoute.of(AppRouter.context)?.settings.name; | |
61 | + Log.d('当前页面:$currentPageName'); | |
62 | + if (currentPageName != AppRouteName.splash) { | |
63 | + Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); | |
64 | + }*/ | |
58 | 65 | Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); |
59 | 66 | } |
60 | 67 | } | ... | ... |
lib/common/request/basic_config.dart
lib/common/request/request_client.dart
... | ... | @@ -3,6 +3,7 @@ import 'dart:convert'; |
3 | 3 | import 'package:dio/dio.dart'; |
4 | 4 | import 'package:flutter/foundation.dart'; |
5 | 5 | import 'package:pretty_dio_logger/pretty_dio_logger.dart'; |
6 | +import 'package:wow_english/utils/toast_util.dart'; | |
6 | 7 | |
7 | 8 | import '../core/user_util.dart'; |
8 | 9 | import 'api_response/api_response_entity.dart'; |
... | ... | @@ -49,6 +50,7 @@ class RequestClient { |
49 | 50 | } catch (e) { |
50 | 51 | print("e type=${e.runtimeType}"); |
51 | 52 | if (e is ApiException && e.code == 405) { |
53 | + showToast('登录已失效,请重新登录!', duration: const Duration(seconds: 3)); | |
52 | 54 | UserUtil.logout(); |
53 | 55 | return null; |
54 | 56 | } | ... | ... |
lib/models/user_entity.dart
... | ... | @@ -56,4 +56,29 @@ class UserEntity { |
56 | 56 | ? '男' |
57 | 57 | : '女'; |
58 | 58 | } |
59 | + | |
60 | + UserEntity copyWith({ | |
61 | + int? id, | |
62 | + String? name, | |
63 | + String? token, | |
64 | + int? age, | |
65 | + int? gender, | |
66 | + String? avatarUrl, | |
67 | + String? phoneNum, | |
68 | + int? fillUserInfo, | |
69 | + int? nowCourseModuleId, | |
70 | + String? effectiveDate, | |
71 | + }) { | |
72 | + return UserEntity() | |
73 | + ..id = id ?? this.id | |
74 | + ..name = name ?? this.name | |
75 | + ..token = token ?? this.token | |
76 | + ..age = age ?? this.age | |
77 | + ..gender = gender ?? this.gender | |
78 | + ..avatarUrl = avatarUrl ?? this.avatarUrl | |
79 | + ..phoneNum = phoneNum ?? this.phoneNum | |
80 | + ..fillUserInfo = fillUserInfo ?? this.fillUserInfo | |
81 | + ..nowCourseModuleId = nowCourseModuleId ?? this.nowCourseModuleId | |
82 | + ..effectiveDate = effectiveDate ?? this.effectiveDate; | |
83 | + } | |
59 | 84 | } | ... | ... |
lib/route/route.dart
... | ... | @@ -43,6 +43,7 @@ class AppRouteName { |
43 | 43 | |
44 | 44 | /// 用户详细信息页 |
45 | 45 | static const String userInformation = 'userInformation'; |
46 | + | |
46 | 47 | /// 修改用户头像 |
47 | 48 | static const String userAvatar = 'userAvatar'; |
48 | 49 | |
... | ... | @@ -50,12 +51,13 @@ class AppRouteName { |
50 | 51 | //static const String userModifyInformation = 'userModifyInformation'; |
51 | 52 | ///看视频 |
52 | 53 | static const String lookVideo = 'lookVideo'; |
54 | + | |
53 | 55 | ///绘本 |
54 | 56 | static const String reading = 'reading'; |
57 | + | |
55 | 58 | ///视频跟读详情 |
56 | 59 | static const String readAfterContent = 'readAfterContent'; |
57 | 60 | |
58 | - | |
59 | 61 | static const String tab = '/'; |
60 | 62 | } |
61 | 63 | |
... | ... | @@ -82,8 +84,8 @@ class AppRouter { |
82 | 84 | } |
83 | 85 | return CupertinoPageRoute( |
84 | 86 | builder: (_) => HomePage( |
85 | - moduleId: moduleId, | |
86 | - )); | |
87 | + moduleId: moduleId, | |
88 | + )); | |
87 | 89 | case AppRouteName.fogPwd: |
88 | 90 | return CupertinoPageRoute(builder: (_) => const ForgetPasswordHomePage()); |
89 | 91 | case AppRouteName.lesson: |
... | ... | @@ -105,11 +107,14 @@ class AppRouter { |
105 | 107 | case AppRouteName.userAvatar: |
106 | 108 | var pageType = 0; |
107 | 109 | if (settings.arguments != null) { |
108 | - final content = (settings.arguments as Map)['pageType'] as String??'0'; | |
110 | + final content = (settings.arguments as Map)['pageType'] as String ?? '0'; | |
109 | 111 | pageType = int.parse(content); |
110 | 112 | } |
111 | - return CupertinoPageRoute(builder: (_) => ModifyUserAvatarPage(pageType: pageType,)); | |
112 | - /*case AppRouteName.userModifyInformation: | |
113 | + return CupertinoPageRoute( | |
114 | + builder: (_) => ModifyUserAvatarPage( | |
115 | + pageType: pageType, | |
116 | + )); | |
117 | + /*case AppRouteName.userModifyInformation: | |
113 | 118 | return CupertinoPageRoute(builder: (_) { |
114 | 119 | ModifyUserInformationType argument = ModifyUserInformationType.name; |
115 | 120 | if (settings.arguments != null) { |
... | ... | @@ -120,18 +125,18 @@ class AppRouter { |
120 | 125 | case AppRouteName.topicPic: |
121 | 126 | var courseLessonId = ''; |
122 | 127 | if (settings.arguments != null) { |
123 | - courseLessonId = (settings.arguments as Map)['courseLessonId'] as String??''; | |
128 | + courseLessonId = (settings.arguments as Map)['courseLessonId'] as String ?? ''; | |
124 | 129 | } |
125 | - return CupertinoPageRoute(builder: (_) => TopicPicturePage(courseLessonId: courseLessonId)); | |
130 | + return CupertinoPageRoute(builder: (_) => TopicPicturePage(courseLessonId: courseLessonId)); | |
126 | 131 | case AppRouteName.lookVideo: |
127 | 132 | final videoUrl = (settings.arguments as Map)['videoUrl'] as String; |
128 | 133 | final title = (settings.arguments as Map)['title'] as String?; |
129 | 134 | return CupertinoPageRoute( |
130 | 135 | builder: (_) => LookVideoPage( |
131 | - videoUrl: videoUrl, | |
132 | - typeTitle: title, | |
133 | - )); | |
134 | - /*case AppRouteName.setPwd: | |
136 | + videoUrl: videoUrl, | |
137 | + typeTitle: title, | |
138 | + )); | |
139 | + /*case AppRouteName.setPwd: | |
135 | 140 | case AppRouteName.setPwd: |
136 | 141 | phoneNum: phoneNum, |
137 | 142 | smsCode: smsCode, |
... | ... | @@ -142,16 +147,15 @@ class AppRouter { |
142 | 147 | final webViewTitle = (settings.arguments as Map)['webViewTitle'] as String; |
143 | 148 | return CupertinoPageRoute( |
144 | 149 | builder: (_) => WowWebViewPage( |
145 | - urlStr: urlStr, | |
146 | - webViewTitle: webViewTitle, | |
147 | - )); | |
150 | + urlStr: urlStr, | |
151 | + webViewTitle: webViewTitle, | |
152 | + )); | |
148 | 153 | case AppRouteName.readAfterContent: |
149 | 154 | var videoFollowReadId = ''; |
150 | 155 | if (settings.arguments != null) { |
151 | - videoFollowReadId = (settings.arguments as Map)['videoFollowReadId'] as String??''; | |
156 | + videoFollowReadId = (settings.arguments as Map)['videoFollowReadId'] as String ?? ''; | |
152 | 157 | } |
153 | - return CupertinoPageRoute( | |
154 | - builder: (_) => RepeatAfterContentPage(videoFollowReadId:videoFollowReadId)); | |
158 | + return CupertinoPageRoute(builder: (_) => RepeatAfterContentPage(videoFollowReadId: videoFollowReadId)); | |
155 | 159 | case AppRouteName.tab: |
156 | 160 | return PageRouteBuilder( |
157 | 161 | opaque: false, |
... | ... | @@ -162,7 +166,7 @@ class AppRouter { |
162 | 166 | case AppRouteName.reading: |
163 | 167 | var courseLessonId = ''; |
164 | 168 | if (settings.arguments != null) { |
165 | - courseLessonId = (settings.arguments as Map)['courseLessonId'] as String??''; | |
169 | + courseLessonId = (settings.arguments as Map)['courseLessonId'] as String ?? ''; | |
166 | 170 | } |
167 | 171 | return CupertinoPageRoute(builder: (_) => ReadingPage(courseLessonId: courseLessonId)); |
168 | 172 | default: |
... | ... | @@ -173,11 +177,11 @@ class AppRouter { |
173 | 177 | } |
174 | 178 | |
175 | 179 | void pushNamed(String routeName, {Object? arguments}) { |
176 | - Navigator.of(AppRouter.context).pushNamed(routeName,arguments: arguments); | |
180 | + Navigator.of(AppRouter.context).pushNamed(routeName, arguments: arguments); | |
177 | 181 | } |
178 | 182 | |
179 | -void pushNamedAndRemoveUntil(String routeName,RoutePredicate predicate, {Object? arguments}) { | |
180 | - Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(routeName, predicate,arguments: arguments); | |
183 | +void pushNamedAndRemoveUntil(String routeName, RoutePredicate predicate, {Object? arguments}) { | |
184 | + Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(routeName, predicate, arguments: arguments); | |
181 | 185 | } |
182 | 186 | |
183 | 187 | void popPage() { | ... | ... |
lib/utils/aliyun_oss_util.dart
... | ... | @@ -37,7 +37,7 @@ class AliyunOssUtil { |
37 | 37 | onReceiveProgress: (count, total) { |
38 | 38 | Log.d("receive: count = $count, and total = $total"); |
39 | 39 | }, |
40 | - aclModel: AclMode.private, | |
40 | + aclModel: AclMode.publicRead, | |
41 | 41 | callback: Callback( |
42 | 42 | callbackUrl: stsEntity.callbackParam.callbackUrl, |
43 | 43 | callbackBody: stsEntity.callbackParam.callbackBody, | ... | ... |