Commit 2a3621f8408a29461f5101e8faa5999701a2d8f5
1 parent
258578de
feat:课程层级调整(增加unit层)
Showing
19 changed files
with
539 additions
and
31 deletions
lib/common/request/apis.dart
| @@ -42,6 +42,9 @@ class Apis { | @@ -42,6 +42,9 @@ class Apis { | ||
| 42 | // 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897663 | 42 | // 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897663 |
| 43 | static const String courseModule = 'home/courseModule'; | 43 | static const String courseModule = 'home/courseModule'; |
| 44 | 44 | ||
| 45 | + /// 课程单元列表 | ||
| 46 | + static const String courseUnit = 'home/courseUnit'; | ||
| 47 | + | ||
| 45 | /// 课程列表 | 48 | /// 课程列表 |
| 46 | // GET /home/courseLesson | 49 | // GET /home/courseLesson |
| 47 | // 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897662 | 50 | // 接口地址:https://app.apifox.com/link/project/2684751/apis/api-89897662 |
lib/common/request/dao/home_dao.dart
| @@ -2,18 +2,27 @@ import 'package:wow_english/common/request/request_client.dart'; | @@ -2,18 +2,27 @@ import 'package:wow_english/common/request/request_client.dart'; | ||
| 2 | import 'package:wow_english/models/course_entity.dart'; | 2 | import 'package:wow_english/models/course_entity.dart'; |
| 3 | 3 | ||
| 4 | import '../../../models/course_module_entity.dart'; | 4 | import '../../../models/course_module_entity.dart'; |
| 5 | +import '../../../models/course_unit_entity.dart'; | ||
| 5 | 6 | ||
| 6 | class HomeDao { | 7 | class HomeDao { |
| 7 | - ///获取课程模块信息 | 8 | + ///获取课程模块(列表)信息 |
| 8 | static Future<List<CourseModuleEntity?>?> courseModule() async { | 9 | static Future<List<CourseModuleEntity?>?> courseModule() async { |
| 9 | var data = await requestClient.get<List<CourseModuleEntity>>(Apis.courseModule); | 10 | var data = await requestClient.get<List<CourseModuleEntity>>(Apis.courseModule); |
| 10 | return data; | 11 | return data; |
| 11 | } | 12 | } |
| 12 | 13 | ||
| 14 | + ///课程单元列表 | ||
| 15 | + static Future<CourseUnitEntity?> courseUnit(int moduleId) async { | ||
| 16 | + Map<String, dynamic> mapData = {}; | ||
| 17 | + mapData['moduleId'] = moduleId; | ||
| 18 | + var data = await requestClient.get<CourseUnitEntity>(Apis.courseUnit, queryParameters: mapData); | ||
| 19 | + return data; | ||
| 20 | + } | ||
| 21 | + | ||
| 13 | ///课程列表 | 22 | ///课程列表 |
| 14 | - static Future<CourseEntity?> courseLesson({String moduleId = ''}) async { | 23 | + static Future<CourseEntity?> courseLesson({int? moduleId}) async { |
| 15 | Map<String, dynamic> mapData = {}; | 24 | Map<String, dynamic> mapData = {}; |
| 16 | - if (moduleId.isNotEmpty) { | 25 | + if (moduleId != null) { |
| 17 | mapData['moduleId'] = moduleId; | 26 | mapData['moduleId'] = moduleId; |
| 18 | } | 27 | } |
| 19 | var data = await requestClient.get<CourseEntity>(Apis.courseLesson, queryParameters: mapData); | 28 | var data = await requestClient.get<CourseEntity>(Apis.courseLesson, queryParameters: mapData); |
lib/generated/json/app_config_entity.g.dart
| 1 | import 'package:wow_english/generated/json/base/json_convert_content.dart'; | 1 | import 'package:wow_english/generated/json/base/json_convert_content.dart'; |
| 2 | import 'package:wow_english/models/app_config_entity.dart'; | 2 | import 'package:wow_english/models/app_config_entity.dart'; |
| 3 | 3 | ||
| 4 | -AppConfigEntity $AppConfigEntityEntityFromJson( | ||
| 5 | - Map<String, dynamic> json) { | ||
| 6 | - final AppConfigEntity appConfigEntityEntity = AppConfigEntity(); | 4 | +AppConfigEntity $AppConfigEntityFromJson(Map<String, dynamic> json) { |
| 5 | + final AppConfigEntity appConfigEntity = AppConfigEntity(); | ||
| 7 | final bool? androidForceUpdate = jsonConvert.convert<bool>( | 6 | final bool? androidForceUpdate = jsonConvert.convert<bool>( |
| 8 | json['androidForceUpdate']); | 7 | json['androidForceUpdate']); |
| 9 | if (androidForceUpdate != null) { | 8 | if (androidForceUpdate != null) { |
| 10 | - appConfigEntityEntity.androidForceUpdate = androidForceUpdate; | 9 | + appConfigEntity.androidForceUpdate = androidForceUpdate; |
| 11 | } | 10 | } |
| 12 | final bool? androidRecommendUpdate = jsonConvert.convert<bool>( | 11 | final bool? androidRecommendUpdate = jsonConvert.convert<bool>( |
| 13 | json['androidRecommendUpdate']); | 12 | json['androidRecommendUpdate']); |
| 14 | if (androidRecommendUpdate != null) { | 13 | if (androidRecommendUpdate != null) { |
| 15 | - appConfigEntityEntity.androidRecommendUpdate = androidRecommendUpdate; | 14 | + appConfigEntity.androidRecommendUpdate = androidRecommendUpdate; |
| 16 | } | 15 | } |
| 17 | final String? androidUpdatePackageUrl = jsonConvert.convert<String>( | 16 | final String? androidUpdatePackageUrl = jsonConvert.convert<String>( |
| 18 | json['androidUpdatePackageUrl']); | 17 | json['androidUpdatePackageUrl']); |
| 19 | if (androidUpdatePackageUrl != null) { | 18 | if (androidUpdatePackageUrl != null) { |
| 20 | - appConfigEntityEntity.androidUpdatePackageUrl = androidUpdatePackageUrl; | 19 | + appConfigEntity.androidUpdatePackageUrl = androidUpdatePackageUrl; |
| 21 | } | 20 | } |
| 22 | final int? androidVersion = jsonConvert.convert<int>(json['androidVersion']); | 21 | final int? androidVersion = jsonConvert.convert<int>(json['androidVersion']); |
| 23 | if (androidVersion != null) { | 22 | if (androidVersion != null) { |
| 24 | - appConfigEntityEntity.androidVersion = androidVersion; | 23 | + appConfigEntity.androidVersion = androidVersion; |
| 25 | } | 24 | } |
| 26 | final bool? iosForceUpdate = jsonConvert.convert<bool>( | 25 | final bool? iosForceUpdate = jsonConvert.convert<bool>( |
| 27 | json['iosForceUpdate']); | 26 | json['iosForceUpdate']); |
| 28 | if (iosForceUpdate != null) { | 27 | if (iosForceUpdate != null) { |
| 29 | - appConfigEntityEntity.iosForceUpdate = iosForceUpdate; | 28 | + appConfigEntity.iosForceUpdate = iosForceUpdate; |
| 30 | } | 29 | } |
| 31 | final bool? iosRecommendUpdate = jsonConvert.convert<bool>( | 30 | final bool? iosRecommendUpdate = jsonConvert.convert<bool>( |
| 32 | json['iosRecommendUpdate']); | 31 | json['iosRecommendUpdate']); |
| 33 | if (iosRecommendUpdate != null) { | 32 | if (iosRecommendUpdate != null) { |
| 34 | - appConfigEntityEntity.iosRecommendUpdate = iosRecommendUpdate; | 33 | + appConfigEntity.iosRecommendUpdate = iosRecommendUpdate; |
| 35 | } | 34 | } |
| 36 | final int? iosVersion = jsonConvert.convert<int>(json['iosVersion']); | 35 | final int? iosVersion = jsonConvert.convert<int>(json['iosVersion']); |
| 37 | if (iosVersion != null) { | 36 | if (iosVersion != null) { |
| 38 | - appConfigEntityEntity.iosVersion = iosVersion; | 37 | + appConfigEntity.iosVersion = iosVersion; |
| 38 | + } | ||
| 39 | + final String? updatePackageDescription = jsonConvert.convert<String>( | ||
| 40 | + json['updatePackageDescription']); | ||
| 41 | + if (updatePackageDescription != null) { | ||
| 42 | + appConfigEntity.updatePackageDescription = updatePackageDescription; | ||
| 39 | } | 43 | } |
| 40 | final String? noticeBeforePurchaseUrl = jsonConvert.convert<String>( | 44 | final String? noticeBeforePurchaseUrl = jsonConvert.convert<String>( |
| 41 | json['noticeBeforePurchaseUrl']); | 45 | json['noticeBeforePurchaseUrl']); |
| 42 | if (noticeBeforePurchaseUrl != null) { | 46 | if (noticeBeforePurchaseUrl != null) { |
| 43 | - appConfigEntityEntity.noticeBeforePurchaseUrl = noticeBeforePurchaseUrl; | 47 | + appConfigEntity.noticeBeforePurchaseUrl = noticeBeforePurchaseUrl; |
| 44 | } | 48 | } |
| 45 | final String? safe = jsonConvert.convert<String>(json['safe']); | 49 | final String? safe = jsonConvert.convert<String>(json['safe']); |
| 46 | if (safe != null) { | 50 | if (safe != null) { |
| 47 | - appConfigEntityEntity.safe = safe; | 51 | + appConfigEntity.safe = safe; |
| 48 | } | 52 | } |
| 49 | - return appConfigEntityEntity; | 53 | + return appConfigEntity; |
| 50 | } | 54 | } |
| 51 | 55 | ||
| 52 | -Map<String, dynamic> $AppConfigEntityEntityToJson( | ||
| 53 | - AppConfigEntity entity) { | 56 | +Map<String, dynamic> $AppConfigEntityToJson(AppConfigEntity entity) { |
| 54 | final Map<String, dynamic> data = <String, dynamic>{}; | 57 | final Map<String, dynamic> data = <String, dynamic>{}; |
| 55 | data['androidForceUpdate'] = entity.androidForceUpdate; | 58 | data['androidForceUpdate'] = entity.androidForceUpdate; |
| 56 | data['androidRecommendUpdate'] = entity.androidRecommendUpdate; | 59 | data['androidRecommendUpdate'] = entity.androidRecommendUpdate; |
| @@ -59,12 +62,13 @@ Map<String, dynamic> $AppConfigEntityEntityToJson( | @@ -59,12 +62,13 @@ Map<String, dynamic> $AppConfigEntityEntityToJson( | ||
| 59 | data['iosForceUpdate'] = entity.iosForceUpdate; | 62 | data['iosForceUpdate'] = entity.iosForceUpdate; |
| 60 | data['iosRecommendUpdate'] = entity.iosRecommendUpdate; | 63 | data['iosRecommendUpdate'] = entity.iosRecommendUpdate; |
| 61 | data['iosVersion'] = entity.iosVersion; | 64 | data['iosVersion'] = entity.iosVersion; |
| 65 | + data['updatePackageDescription'] = entity.updatePackageDescription; | ||
| 62 | data['noticeBeforePurchaseUrl'] = entity.noticeBeforePurchaseUrl; | 66 | data['noticeBeforePurchaseUrl'] = entity.noticeBeforePurchaseUrl; |
| 63 | data['safe'] = entity.safe; | 67 | data['safe'] = entity.safe; |
| 64 | return data; | 68 | return data; |
| 65 | } | 69 | } |
| 66 | 70 | ||
| 67 | -extension AppConfigEntityEntityExtension on AppConfigEntity { | 71 | +extension AppConfigEntityExtension on AppConfigEntity { |
| 68 | AppConfigEntity copyWith({ | 72 | AppConfigEntity copyWith({ |
| 69 | bool? androidForceUpdate, | 73 | bool? androidForceUpdate, |
| 70 | bool? androidRecommendUpdate, | 74 | bool? androidRecommendUpdate, |
| @@ -73,6 +77,7 @@ extension AppConfigEntityEntityExtension on AppConfigEntity { | @@ -73,6 +77,7 @@ extension AppConfigEntityEntityExtension on AppConfigEntity { | ||
| 73 | bool? iosForceUpdate, | 77 | bool? iosForceUpdate, |
| 74 | bool? iosRecommendUpdate, | 78 | bool? iosRecommendUpdate, |
| 75 | int? iosVersion, | 79 | int? iosVersion, |
| 80 | + String? updatePackageDescription, | ||
| 76 | String? noticeBeforePurchaseUrl, | 81 | String? noticeBeforePurchaseUrl, |
| 77 | String? safe, | 82 | String? safe, |
| 78 | }) { | 83 | }) { |
| @@ -86,6 +91,8 @@ extension AppConfigEntityEntityExtension on AppConfigEntity { | @@ -86,6 +91,8 @@ extension AppConfigEntityEntityExtension on AppConfigEntity { | ||
| 86 | ..iosForceUpdate = iosForceUpdate ?? this.iosForceUpdate | 91 | ..iosForceUpdate = iosForceUpdate ?? this.iosForceUpdate |
| 87 | ..iosRecommendUpdate = iosRecommendUpdate ?? this.iosRecommendUpdate | 92 | ..iosRecommendUpdate = iosRecommendUpdate ?? this.iosRecommendUpdate |
| 88 | ..iosVersion = iosVersion ?? this.iosVersion | 93 | ..iosVersion = iosVersion ?? this.iosVersion |
| 94 | + ..updatePackageDescription = updatePackageDescription ?? | ||
| 95 | + this.updatePackageDescription | ||
| 89 | ..noticeBeforePurchaseUrl = noticeBeforePurchaseUrl ?? | 96 | ..noticeBeforePurchaseUrl = noticeBeforePurchaseUrl ?? |
| 90 | this.noticeBeforePurchaseUrl | 97 | this.noticeBeforePurchaseUrl |
| 91 | ..safe = safe ?? this.safe; | 98 | ..safe = safe ?? this.safe; |
lib/generated/json/base/json_convert_content.dart
| @@ -9,6 +9,7 @@ import 'package:wow_english/models/app_config_entity.dart'; | @@ -9,6 +9,7 @@ import 'package:wow_english/models/app_config_entity.dart'; | ||
| 9 | import 'package:wow_english/models/course_entity.dart'; | 9 | import 'package:wow_english/models/course_entity.dart'; |
| 10 | import 'package:wow_english/models/course_module_entity.dart'; | 10 | import 'package:wow_english/models/course_module_entity.dart'; |
| 11 | import 'package:wow_english/models/course_process_entity.dart'; | 11 | import 'package:wow_english/models/course_process_entity.dart'; |
| 12 | +import 'package:wow_english/models/course_unit_entity.dart'; | ||
| 12 | import 'package:wow_english/models/follow_read_entity.dart'; | 13 | import 'package:wow_english/models/follow_read_entity.dart'; |
| 13 | import 'package:wow_english/models/listen_entity.dart'; | 14 | import 'package:wow_english/models/listen_entity.dart'; |
| 14 | import 'package:wow_english/models/product_entity.dart'; | 15 | import 'package:wow_english/models/product_entity.dart'; |
| @@ -192,6 +193,14 @@ class JsonConvert { | @@ -192,6 +193,14 @@ class JsonConvert { | ||
| 192 | return data.map<CourseProcessVideos>((Map<String, dynamic> e) => | 193 | return data.map<CourseProcessVideos>((Map<String, dynamic> e) => |
| 193 | CourseProcessVideos.fromJson(e)).toList() as M; | 194 | CourseProcessVideos.fromJson(e)).toList() as M; |
| 194 | } | 195 | } |
| 196 | + if (<CourseUnitEntity>[] is M) { | ||
| 197 | + return data.map<CourseUnitEntity>((Map<String, dynamic> e) => | ||
| 198 | + CourseUnitEntity.fromJson(e)).toList() as M; | ||
| 199 | + } | ||
| 200 | + if (<CourseUnitDetail>[] is M) { | ||
| 201 | + return data.map<CourseUnitDetail>((Map<String, dynamic> e) => | ||
| 202 | + CourseUnitDetail.fromJson(e)).toList() as M; | ||
| 203 | + } | ||
| 195 | if (<FollowReadEntity>[] is M) { | 204 | if (<FollowReadEntity>[] is M) { |
| 196 | return data.map<FollowReadEntity>((Map<String, dynamic> e) => | 205 | return data.map<FollowReadEntity>((Map<String, dynamic> e) => |
| 197 | FollowReadEntity.fromJson(e)).toList() as M; | 206 | FollowReadEntity.fromJson(e)).toList() as M; |
| @@ -246,6 +255,8 @@ class JsonConvertClassCollection { | @@ -246,6 +255,8 @@ class JsonConvertClassCollection { | ||
| 246 | (CourseProcessTopicsTopicAnswerList) | 255 | (CourseProcessTopicsTopicAnswerList) |
| 247 | .toString(): CourseProcessTopicsTopicAnswerList.fromJson, | 256 | .toString(): CourseProcessTopicsTopicAnswerList.fromJson, |
| 248 | (CourseProcessVideos).toString(): CourseProcessVideos.fromJson, | 257 | (CourseProcessVideos).toString(): CourseProcessVideos.fromJson, |
| 258 | + (CourseUnitEntity).toString(): CourseUnitEntity.fromJson, | ||
| 259 | + (CourseUnitDetail).toString(): CourseUnitDetail.fromJson, | ||
| 249 | (FollowReadEntity).toString(): FollowReadEntity.fromJson, | 260 | (FollowReadEntity).toString(): FollowReadEntity.fromJson, |
| 250 | (ListenEntity).toString(): ListenEntity.fromJson, | 261 | (ListenEntity).toString(): ListenEntity.fromJson, |
| 251 | (ProductEntity).toString(): ProductEntity.fromJson, | 262 | (ProductEntity).toString(): ProductEntity.fromJson, |
lib/generated/json/course_module_entity.g.dart
| @@ -3,7 +3,7 @@ import 'package:wow_english/models/course_module_entity.dart'; | @@ -3,7 +3,7 @@ import 'package:wow_english/models/course_module_entity.dart'; | ||
| 3 | 3 | ||
| 4 | CourseModuleEntity $CourseModuleEntityFromJson(Map<String, dynamic> json) { | 4 | CourseModuleEntity $CourseModuleEntityFromJson(Map<String, dynamic> json) { |
| 5 | final CourseModuleEntity courseModuleEntity = CourseModuleEntity(); | 5 | final CourseModuleEntity courseModuleEntity = CourseModuleEntity(); |
| 6 | - final String? id = jsonConvert.convert<String>(json['id']); | 6 | + final int? id = jsonConvert.convert<int>(json['id']); |
| 7 | if (id != null) { | 7 | if (id != null) { |
| 8 | courseModuleEntity.id = id; | 8 | courseModuleEntity.id = id; |
| 9 | } | 9 | } |
| @@ -90,7 +90,7 @@ Map<String, dynamic> $CourseModuleEntityToJson(CourseModuleEntity entity) { | @@ -90,7 +90,7 @@ Map<String, dynamic> $CourseModuleEntityToJson(CourseModuleEntity entity) { | ||
| 90 | 90 | ||
| 91 | extension CourseModuleEntityExtension on CourseModuleEntity { | 91 | extension CourseModuleEntityExtension on CourseModuleEntity { |
| 92 | CourseModuleEntity copyWith({ | 92 | CourseModuleEntity copyWith({ |
| 93 | - String? id, | 93 | + int? id, |
| 94 | String? code, | 94 | String? code, |
| 95 | int? courseModuleThemeId, | 95 | int? courseModuleThemeId, |
| 96 | int? courseTotal, | 96 | int? courseTotal, |
lib/generated/json/course_unit_entity.g.dart
0 → 100644
| 1 | +import 'package:wow_english/generated/json/base/json_convert_content.dart'; | ||
| 2 | +import 'package:wow_english/models/course_unit_entity.dart'; | ||
| 3 | + | ||
| 4 | +CourseUnitEntity $CourseUnitEntityFromJson(Map<String, dynamic> json) { | ||
| 5 | + final CourseUnitEntity courseUnitEntity = CourseUnitEntity(); | ||
| 6 | + final List< | ||
| 7 | + CourseUnitDetail>? courseUnitVOList = (json['courseUnitVOList'] as List< | ||
| 8 | + dynamic>?) | ||
| 9 | + ?.map( | ||
| 10 | + (e) => jsonConvert.convert<CourseUnitDetail>(e) as CourseUnitDetail) | ||
| 11 | + .toList(); | ||
| 12 | + if (courseUnitVOList != null) { | ||
| 13 | + courseUnitEntity.courseUnitVOList = courseUnitVOList; | ||
| 14 | + } | ||
| 15 | + final int? nowStep = jsonConvert.convert<int>(json['nowStep']); | ||
| 16 | + if (nowStep != null) { | ||
| 17 | + courseUnitEntity.nowStep = nowStep; | ||
| 18 | + } | ||
| 19 | + final int? total = jsonConvert.convert<int>(json['total']); | ||
| 20 | + if (total != null) { | ||
| 21 | + courseUnitEntity.total = total; | ||
| 22 | + } | ||
| 23 | + final int? nowCourseModuleId = jsonConvert.convert<int>( | ||
| 24 | + json['nowCourseModuleId']); | ||
| 25 | + if (nowCourseModuleId != null) { | ||
| 26 | + courseUnitEntity.nowCourseModuleId = nowCourseModuleId; | ||
| 27 | + } | ||
| 28 | + final String? nowCourseModuleName = jsonConvert.convert<String>( | ||
| 29 | + json['nowCourseModuleName']); | ||
| 30 | + if (nowCourseModuleName != null) { | ||
| 31 | + courseUnitEntity.nowCourseModuleName = nowCourseModuleName; | ||
| 32 | + } | ||
| 33 | + final String? courseModuleThemeColor = jsonConvert.convert<String>( | ||
| 34 | + json['courseModuleThemeColor']); | ||
| 35 | + if (courseModuleThemeColor != null) { | ||
| 36 | + courseUnitEntity.courseModuleThemeColor = courseModuleThemeColor; | ||
| 37 | + } | ||
| 38 | + final String? courseModuleCode = jsonConvert.convert<String>( | ||
| 39 | + json['courseModuleCode']); | ||
| 40 | + if (courseModuleCode != null) { | ||
| 41 | + courseUnitEntity.courseModuleCode = courseModuleCode; | ||
| 42 | + } | ||
| 43 | + return courseUnitEntity; | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +Map<String, dynamic> $CourseUnitEntityToJson(CourseUnitEntity entity) { | ||
| 47 | + final Map<String, dynamic> data = <String, dynamic>{}; | ||
| 48 | + data['courseUnitVOList'] = | ||
| 49 | + entity.courseUnitVOList?.map((v) => v.toJson()).toList(); | ||
| 50 | + data['nowStep'] = entity.nowStep; | ||
| 51 | + data['total'] = entity.total; | ||
| 52 | + data['nowCourseModuleId'] = entity.nowCourseModuleId; | ||
| 53 | + data['nowCourseModuleName'] = entity.nowCourseModuleName; | ||
| 54 | + data['courseModuleThemeColor'] = entity.courseModuleThemeColor; | ||
| 55 | + data['courseModuleCode'] = entity.courseModuleCode; | ||
| 56 | + return data; | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +extension CourseUnitEntityExtension on CourseUnitEntity { | ||
| 60 | + CourseUnitEntity copyWith({ | ||
| 61 | + List<CourseUnitDetail>? courseUnitVOList, | ||
| 62 | + int? nowStep, | ||
| 63 | + int? total, | ||
| 64 | + int? nowCourseModuleId, | ||
| 65 | + String? nowCourseModuleName, | ||
| 66 | + String? courseModuleThemeColor, | ||
| 67 | + String? courseModuleCode, | ||
| 68 | + }) { | ||
| 69 | + return CourseUnitEntity() | ||
| 70 | + ..courseUnitVOList = courseUnitVOList ?? this.courseUnitVOList | ||
| 71 | + ..nowStep = nowStep ?? this.nowStep | ||
| 72 | + ..total = total ?? this.total | ||
| 73 | + ..nowCourseModuleId = nowCourseModuleId ?? this.nowCourseModuleId | ||
| 74 | + ..nowCourseModuleName = nowCourseModuleName ?? this.nowCourseModuleName | ||
| 75 | + ..courseModuleThemeColor = courseModuleThemeColor ?? | ||
| 76 | + this.courseModuleThemeColor | ||
| 77 | + ..courseModuleCode = courseModuleCode ?? this.courseModuleCode; | ||
| 78 | + } | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | +CourseUnitDetail $CourseUnitDetailFromJson(Map<String, dynamic> json) { | ||
| 82 | + final CourseUnitDetail courseUnitDetail = CourseUnitDetail(); | ||
| 83 | + final int? courseModuleId = jsonConvert.convert<int>(json['courseModuleId']); | ||
| 84 | + if (courseModuleId != null) { | ||
| 85 | + courseUnitDetail.courseModuleId = courseModuleId; | ||
| 86 | + } | ||
| 87 | + final int? id = jsonConvert.convert<int>(json['id']); | ||
| 88 | + if (id != null) { | ||
| 89 | + courseUnitDetail.id = id; | ||
| 90 | + } | ||
| 91 | + final String? name = jsonConvert.convert<String>(json['name']); | ||
| 92 | + if (name != null) { | ||
| 93 | + courseUnitDetail.name = name; | ||
| 94 | + } | ||
| 95 | + final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']); | ||
| 96 | + if (coverUrl != null) { | ||
| 97 | + courseUnitDetail.coverUrl = coverUrl; | ||
| 98 | + } | ||
| 99 | + final bool? lock = jsonConvert.convert<bool>(json['lock']); | ||
| 100 | + if (lock != null) { | ||
| 101 | + courseUnitDetail.lock = lock; | ||
| 102 | + } | ||
| 103 | + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']); | ||
| 104 | + if (sortOrder != null) { | ||
| 105 | + courseUnitDetail.sortOrder = sortOrder; | ||
| 106 | + } | ||
| 107 | + final int? status = jsonConvert.convert<int>(json['status']); | ||
| 108 | + if (status != null) { | ||
| 109 | + courseUnitDetail.status = status; | ||
| 110 | + } | ||
| 111 | + return courseUnitDetail; | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +Map<String, dynamic> $CourseUnitDetailToJson(CourseUnitDetail entity) { | ||
| 115 | + final Map<String, dynamic> data = <String, dynamic>{}; | ||
| 116 | + data['courseModuleId'] = entity.courseModuleId; | ||
| 117 | + data['id'] = entity.id; | ||
| 118 | + data['name'] = entity.name; | ||
| 119 | + data['coverUrl'] = entity.coverUrl; | ||
| 120 | + data['lock'] = entity.lock; | ||
| 121 | + data['sortOrder'] = entity.sortOrder; | ||
| 122 | + data['status'] = entity.status; | ||
| 123 | + return data; | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +extension CourseUnitDetailExtension on CourseUnitDetail { | ||
| 127 | + CourseUnitDetail copyWith({ | ||
| 128 | + int? courseModuleId, | ||
| 129 | + int? id, | ||
| 130 | + String? name, | ||
| 131 | + String? coverUrl, | ||
| 132 | + bool? lock, | ||
| 133 | + int? sortOrder, | ||
| 134 | + int? status, | ||
| 135 | + }) { | ||
| 136 | + return CourseUnitDetail() | ||
| 137 | + ..courseModuleId = courseModuleId ?? this.courseModuleId | ||
| 138 | + ..id = id ?? this.id | ||
| 139 | + ..name = name ?? this.name | ||
| 140 | + ..coverUrl = coverUrl ?? this.coverUrl | ||
| 141 | + ..lock = lock ?? this.lock | ||
| 142 | + ..sortOrder = sortOrder ?? this.sortOrder | ||
| 143 | + ..status = status ?? this.status; | ||
| 144 | + } | ||
| 145 | +} | ||
| 0 | \ No newline at end of file | 146 | \ No newline at end of file |
lib/models/course_module_entity.dart
| @@ -5,7 +5,7 @@ import 'package:wow_english/generated/json/course_module_entity.g.dart'; | @@ -5,7 +5,7 @@ import 'package:wow_english/generated/json/course_module_entity.g.dart'; | ||
| 5 | 5 | ||
| 6 | @JsonSerializable() | 6 | @JsonSerializable() |
| 7 | class CourseModuleEntity { | 7 | class CourseModuleEntity { |
| 8 | - late String id; | 8 | + late int id; |
| 9 | String? code; | 9 | String? code; |
| 10 | int? courseModuleThemeId; | 10 | int? courseModuleThemeId; |
| 11 | int? courseTotal; | 11 | int? courseTotal; |
lib/models/course_unit_entity.dart
0 → 100644
| 1 | +import 'package:wow_english/generated/json/base/json_field.dart'; | ||
| 2 | +import 'package:wow_english/generated/json/course_unit_entity.g.dart'; | ||
| 3 | +import 'dart:convert'; | ||
| 4 | + | ||
| 5 | +export 'package:wow_english/generated/json/course_unit_entity.g.dart'; | ||
| 6 | + | ||
| 7 | +@JsonSerializable() | ||
| 8 | +class CourseUnitEntity { | ||
| 9 | + | ||
| 10 | + // 课程详情列表 | ||
| 11 | + List<CourseUnitDetail>? courseUnitVOList; | ||
| 12 | + | ||
| 13 | + // 当前进行了多少节课程 | ||
| 14 | + int? nowStep; | ||
| 15 | + | ||
| 16 | + // 当前模块一共多少节课程 | ||
| 17 | + int? total; | ||
| 18 | + | ||
| 19 | + // 当前模块id | ||
| 20 | + int? nowCourseModuleId; | ||
| 21 | + | ||
| 22 | + // 当前模块名 | ||
| 23 | + String? nowCourseModuleName; | ||
| 24 | + | ||
| 25 | + // 主题颜色值 | ||
| 26 | + String? courseModuleThemeColor; | ||
| 27 | + | ||
| 28 | + // 课程模块code | ||
| 29 | + String? courseModuleCode; | ||
| 30 | + | ||
| 31 | + CourseUnitEntity(); | ||
| 32 | + | ||
| 33 | + factory CourseUnitEntity.fromJson(Map<String, dynamic> json) => $CourseUnitEntityFromJson(json); | ||
| 34 | + | ||
| 35 | + Map<String, dynamic> toJson() => $CourseUnitEntityToJson(this); | ||
| 36 | + | ||
| 37 | + @override | ||
| 38 | + String toString() { | ||
| 39 | + return jsonEncode(this); | ||
| 40 | + } | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | + | ||
| 44 | +@JsonSerializable() | ||
| 45 | +class CourseUnitDetail { | ||
| 46 | + | ||
| 47 | + // 模块id | ||
| 48 | + int? courseModuleId; | ||
| 49 | + | ||
| 50 | + // 单元 | ||
| 51 | + int? id; | ||
| 52 | + | ||
| 53 | + // 单元名称 | ||
| 54 | + String? name; | ||
| 55 | + | ||
| 56 | + // 单元封面 | ||
| 57 | + String? coverUrl; | ||
| 58 | + | ||
| 59 | + bool? lock; | ||
| 60 | + | ||
| 61 | + int? sortOrder; | ||
| 62 | + | ||
| 63 | + int? status; | ||
| 64 | + | ||
| 65 | + CourseUnitDetail(); | ||
| 66 | + | ||
| 67 | + factory CourseUnitDetail.fromJson(Map<String, dynamic> json) => $CourseUnitDetailFromJson(json); | ||
| 68 | + | ||
| 69 | + Map<String, dynamic> toJson() => $CourseUnitDetailToJson(this); | ||
| 70 | + | ||
| 71 | + @override | ||
| 72 | + String toString() { | ||
| 73 | + return jsonEncode(this); | ||
| 74 | + } | ||
| 75 | +} | ||
| 0 | \ No newline at end of file | 76 | \ No newline at end of file |
lib/pages/home/bloc/home_bloc.dart
| @@ -13,7 +13,7 @@ part 'home_event.dart'; | @@ -13,7 +13,7 @@ part 'home_event.dart'; | ||
| 13 | part 'home_state.dart'; | 13 | part 'home_state.dart'; |
| 14 | 14 | ||
| 15 | class HomeBloc extends Bloc<HomeEvent, HomeState> { | 15 | class HomeBloc extends Bloc<HomeEvent, HomeState> { |
| 16 | - final String? moduleId; | 16 | + final int? moduleId; |
| 17 | 17 | ||
| 18 | CourseEntity? _modelData; | 18 | CourseEntity? _modelData; |
| 19 | 19 | ||
| @@ -33,7 +33,7 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> { | @@ -33,7 +33,7 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> { | ||
| 33 | void _requestData(RequestDataEvent event, Emitter<HomeState> emitter) async { | 33 | void _requestData(RequestDataEvent event, Emitter<HomeState> emitter) async { |
| 34 | try { | 34 | try { |
| 35 | await loading(() async { | 35 | await loading(() async { |
| 36 | - _modelData = await HomeDao.courseLesson(moduleId: moduleId ?? ''); | 36 | + _modelData = await HomeDao.courseLesson(moduleId: moduleId); |
| 37 | emitter(HomeDataLoadState()); | 37 | emitter(HomeDataLoadState()); |
| 38 | }); | 38 | }); |
| 39 | } catch (e) { | 39 | } catch (e) { |
lib/pages/home/home_page.dart
| @@ -6,7 +6,7 @@ import 'package:wow_english/common/extension/string_extension.dart'; | @@ -6,7 +6,7 @@ import 'package:wow_english/common/extension/string_extension.dart'; | ||
| 6 | import 'package:wow_english/models/course_entity.dart'; | 6 | import 'package:wow_english/models/course_entity.dart'; |
| 7 | import 'package:wow_english/pages/home/widgets/home_bouns_item.dart'; | 7 | import 'package:wow_english/pages/home/widgets/home_bouns_item.dart'; |
| 8 | import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart'; | 8 | import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart'; |
| 9 | -import 'package:wow_english/pages/home/widgets/home_vidoe_item.dart'; | 9 | +import 'package:wow_english/pages/home/widgets/home_video_item.dart'; |
| 10 | import 'package:wow_english/route/route.dart'; | 10 | import 'package:wow_english/route/route.dart'; |
| 11 | import 'package:wow_english/utils/toast_util.dart'; | 11 | import 'package:wow_english/utils/toast_util.dart'; |
| 12 | 12 | ||
| @@ -17,7 +17,7 @@ class HomePage extends StatelessWidget { | @@ -17,7 +17,7 @@ class HomePage extends StatelessWidget { | ||
| 17 | const HomePage({super.key, this.moduleId}); | 17 | const HomePage({super.key, this.moduleId}); |
| 18 | 18 | ||
| 19 | /// 模块id | 19 | /// 模块id |
| 20 | - final String? moduleId; | 20 | + final int? moduleId; |
| 21 | 21 | ||
| 22 | @override | 22 | @override |
| 23 | Widget build(BuildContext context) { | 23 | Widget build(BuildContext context) { |
lib/pages/home/widgets/home_vidoe_item.dart renamed to lib/pages/home/widgets/home_video_item.dart
lib/pages/lessons/lesson_page.dart
| @@ -171,7 +171,7 @@ class _LessonPageView extends StatelessWidget { | @@ -171,7 +171,7 @@ class _LessonPageView extends StatelessWidget { | ||
| 171 | model: model, | 171 | model: model, |
| 172 | isSelected: bloc.currentPageIndex == index, | 172 | isSelected: bloc.currentPageIndex == index, |
| 173 | onClickEvent: () { | 173 | onClickEvent: () { |
| 174 | - pushNamedAndRemoveUntil(AppRouteName.home, (route) => false,arguments: {'moduleId':model?.id}); | 174 | + pushNamed(AppRouteName.unit, arguments: {'courseModuleEntity':model}); |
| 175 | }, | 175 | }, |
| 176 | ), | 176 | ), |
| 177 | ), | 177 | ), |
lib/pages/unit/bloc.dart
0 → 100644
| 1 | +import 'package:bloc/bloc.dart'; | ||
| 2 | + | ||
| 3 | +import '../../common/request/dao/home_dao.dart'; | ||
| 4 | +import '../../common/request/exception.dart'; | ||
| 5 | +import '../../models/course_unit_entity.dart'; | ||
| 6 | +import '../../utils/loading.dart'; | ||
| 7 | +import '../../utils/toast_util.dart'; | ||
| 8 | +import 'event.dart'; | ||
| 9 | +import 'state.dart'; | ||
| 10 | + | ||
| 11 | +class UnitBloc extends Bloc<UnitEvent, UnitState> { | ||
| 12 | + | ||
| 13 | + CourseUnitEntity? _modelData; | ||
| 14 | + | ||
| 15 | + CourseUnitEntity? get modelData => _modelData; | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + UnitBloc() : super(UnitState().init()) { | ||
| 19 | + on<RequestUnitDataEvent>(_requestData); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + void _requestData(RequestUnitDataEvent event, Emitter<UnitState> emitter) async { | ||
| 23 | + try { | ||
| 24 | + await loading(() async { | ||
| 25 | + _modelData = await HomeDao.courseUnit(event.moduleId); | ||
| 26 | + emitter(UnitDataLoadState()); | ||
| 27 | + }); | ||
| 28 | + } catch (e) { | ||
| 29 | + if (e is ApiException) { | ||
| 30 | + showToast(e.message ?? '请求失败,请检查网络连接'); | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | +} |
lib/pages/unit/event.dart
0 → 100644
lib/pages/unit/state.dart
0 → 100644
lib/pages/unit/view.dart
0 → 100644
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 3 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 4 | +import 'package:wow_english/pages/unit/state.dart'; | ||
| 5 | +import 'package:wow_english/pages/unit/widget/course_unit_header_widget.dart'; | ||
| 6 | +import 'package:wow_english/pages/unit/widget/course_unit_item.dart'; | ||
| 7 | +import 'package:wow_english/route/route.dart'; | ||
| 8 | + | ||
| 9 | +import '../../models/course_module_entity.dart'; | ||
| 10 | +import '../../models/course_unit_entity.dart'; | ||
| 11 | +import '../../utils/toast_util.dart'; | ||
| 12 | +import 'bloc.dart'; | ||
| 13 | +import 'event.dart'; | ||
| 14 | + | ||
| 15 | +class UnitPage extends StatelessWidget { | ||
| 16 | + const UnitPage({super.key, required this.courseEntity}); | ||
| 17 | + | ||
| 18 | + /// 模块 | ||
| 19 | + final CourseModuleEntity courseEntity; | ||
| 20 | + | ||
| 21 | + @override | ||
| 22 | + Widget build(BuildContext context) { | ||
| 23 | + return BlocProvider( | ||
| 24 | + create: (BuildContext context) => | ||
| 25 | + UnitBloc()..add(RequestUnitDataEvent(courseEntity.id)), | ||
| 26 | + child: Builder(builder: (context) => _buildPage(context)), | ||
| 27 | + ); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + Widget _buildPage(BuildContext context) { | ||
| 31 | + return BlocBuilder<UnitBloc, UnitState>(builder: (context, state) { | ||
| 32 | + final bloc = BlocProvider.of<UnitBloc>(context); | ||
| 33 | + return Scaffold( | ||
| 34 | + body: Container( | ||
| 35 | + color: Colors.white, | ||
| 36 | + child: Center( | ||
| 37 | + child: Column( | ||
| 38 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 39 | + children: [ | ||
| 40 | + CourseUnitHeaderWidget(entity: courseEntity), | ||
| 41 | + Expanded( | ||
| 42 | + child: ListView.builder( | ||
| 43 | + itemCount: | ||
| 44 | + bloc.modelData?.courseUnitVOList?.length ?? 0, | ||
| 45 | + scrollDirection: Axis.horizontal, | ||
| 46 | + itemBuilder: (BuildContext context, int index) { | ||
| 47 | + CourseUnitDetail? data = | ||
| 48 | + bloc.modelData?.courseUnitVOList?[index]; | ||
| 49 | + return GestureDetector( | ||
| 50 | + onTap: () { | ||
| 51 | + if (data.lock == true) { | ||
| 52 | + showToast('当前unit暂未解锁'); | ||
| 53 | + return; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + ///进入课堂 | ||
| 57 | + pushNamedAndRemoveUntil( | ||
| 58 | + AppRouteName.home, (route) => route.isFirst, | ||
| 59 | + arguments: { | ||
| 60 | + 'moduleId': data.courseModuleId, | ||
| 61 | + 'unitId': data.id | ||
| 62 | + }); | ||
| 63 | + }, | ||
| 64 | + child: CourseUnitItem( | ||
| 65 | + unitEntity: bloc.modelData!, | ||
| 66 | + unitLesson: data!, | ||
| 67 | + ), | ||
| 68 | + ); | ||
| 69 | + })), | ||
| 70 | + SafeArea( | ||
| 71 | + child: Column( | ||
| 72 | + children: [ | ||
| 73 | + 6.verticalSpace, | ||
| 74 | + ], | ||
| 75 | + ), | ||
| 76 | + ) | ||
| 77 | + ], | ||
| 78 | + ), | ||
| 79 | + ), | ||
| 80 | + ), | ||
| 81 | + ); | ||
| 82 | + }); | ||
| 83 | + } | ||
| 84 | +} |
lib/pages/unit/widget/course_unit_header_widget.dart
0 → 100644
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 3 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 4 | +import 'package:wow_english/common/extension/string_extension.dart'; | ||
| 5 | +import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | ||
| 6 | + | ||
| 7 | +import '../../../models/course_module_entity.dart'; | ||
| 8 | +import '../../home/courese_module_model.dart'; | ||
| 9 | + | ||
| 10 | +class CourseUnitHeaderWidget extends StatelessWidget { | ||
| 11 | + const CourseUnitHeaderWidget({super.key, this.entity}); | ||
| 12 | + | ||
| 13 | + final CourseModuleEntity? entity; | ||
| 14 | + | ||
| 15 | + @override | ||
| 16 | + Widget build(BuildContext context) { | ||
| 17 | + return BlocBuilder<UserBloc, UserState>( | ||
| 18 | + builder: (context, state) { | ||
| 19 | + return Container( | ||
| 20 | + height: 45, | ||
| 21 | + width: double.infinity, | ||
| 22 | + color: | ||
| 23 | + CourseModuleModel(entity?.code ?? 'Phase-1').color, | ||
| 24 | + padding: EdgeInsets.symmetric(horizontal: 9.5.w), | ||
| 25 | + child: Row( | ||
| 26 | + children: [ | ||
| 27 | + ScreenUtil().bottomBarHeight.horizontalSpace, | ||
| 28 | + GestureDetector( | ||
| 29 | + onTap: () { | ||
| 30 | + Navigator.pop(context); | ||
| 31 | + }, | ||
| 32 | + child: Container( | ||
| 33 | + alignment: Alignment.center, | ||
| 34 | + child: Image.asset( | ||
| 35 | + 'back_around'.assetPng, | ||
| 36 | + height: 40.h, | ||
| 37 | + width: 40.w, | ||
| 38 | + ), | ||
| 39 | + ), | ||
| 40 | + ), | ||
| 41 | + 20.horizontalSpace, | ||
| 42 | + Expanded( | ||
| 43 | + child: Text(entity?.name ?? | ||
| 44 | + CourseModuleModel(entity?.code ?? 'Phase-1') | ||
| 45 | + .courseModuleTitle, | ||
| 46 | + textAlign: TextAlign.left, | ||
| 47 | + style: const TextStyle(color: Colors.white, fontSize: 30.0), | ||
| 48 | + )), | ||
| 49 | + ScreenUtil().bottomBarHeight.horizontalSpace, | ||
| 50 | + ], | ||
| 51 | + )); | ||
| 52 | + }, | ||
| 53 | + ); | ||
| 54 | + } | ||
| 55 | +} |
lib/pages/unit/widget/course_unit_item.dart
0 → 100644
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 3 | +import 'package:wow_english/common/extension/string_extension.dart'; | ||
| 4 | +import 'package:wow_english/common/widgets/ow_image_widget.dart'; | ||
| 5 | + | ||
| 6 | +import '../../../models/course_unit_entity.dart'; | ||
| 7 | + | ||
| 8 | +class CourseUnitItem extends StatelessWidget { | ||
| 9 | + const CourseUnitItem( | ||
| 10 | + {super.key, required this.unitEntity, required this.unitLesson}); | ||
| 11 | + | ||
| 12 | + final CourseUnitEntity unitEntity; | ||
| 13 | + final CourseUnitDetail unitLesson; | ||
| 14 | + | ||
| 15 | + @override | ||
| 16 | + Widget build(BuildContext context) { | ||
| 17 | + return Padding( | ||
| 18 | + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 24.h), | ||
| 19 | + child: Container( | ||
| 20 | + width: 165.w, | ||
| 21 | + padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 24.h), | ||
| 22 | + decoration: BoxDecoration( | ||
| 23 | + image: DecorationImage( | ||
| 24 | + image: AssetImage('gendubeij'.assetPng), fit: BoxFit.fill), | ||
| 25 | + ), | ||
| 26 | + child: Column( | ||
| 27 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 28 | + children: [ | ||
| 29 | + Expanded( | ||
| 30 | + child: Container( | ||
| 31 | + decoration: BoxDecoration( | ||
| 32 | + border: Border.all( | ||
| 33 | + width: 2, | ||
| 34 | + color: const Color(0xFF140C10), | ||
| 35 | + ), | ||
| 36 | + borderRadius: BorderRadius.circular(6)), | ||
| 37 | + child: OwImageWidget( | ||
| 38 | + name: unitLesson.coverUrl ?? '', | ||
| 39 | + fit: BoxFit.fitHeight, | ||
| 40 | + ), | ||
| 41 | + )), | ||
| 42 | + 20.verticalSpace, | ||
| 43 | + SizedBox( | ||
| 44 | + height: 40.h, | ||
| 45 | + child: Text( | ||
| 46 | + unitLesson.name ?? '', | ||
| 47 | + maxLines: 2, | ||
| 48 | + overflow: TextOverflow.ellipsis, | ||
| 49 | + style: | ||
| 50 | + TextStyle(fontSize: 11.sp, color: const Color(0xFF140C10)), | ||
| 51 | + ), | ||
| 52 | + ) | ||
| 53 | + ], | ||
| 54 | + ), | ||
| 55 | + ), | ||
| 56 | + ); | ||
| 57 | + } | ||
| 58 | +} |
lib/route/route.dart
| @@ -26,11 +26,12 @@ import 'package:wow_english/pages/user/setting/setting_page.dart'; | @@ -26,11 +26,12 @@ import 'package:wow_english/pages/user/setting/setting_page.dart'; | ||
| 26 | import 'package:wow_english/pages/user/user_page.dart'; | 26 | import 'package:wow_english/pages/user/user_page.dart'; |
| 27 | import 'package:wow_english/pages/video/lookvideo/look_video_page.dart'; | 27 | import 'package:wow_english/pages/video/lookvideo/look_video_page.dart'; |
| 28 | 28 | ||
| 29 | +import '../models/course_module_entity.dart'; | ||
| 29 | import '../pages/reading/reading_page.dart'; | 30 | import '../pages/reading/reading_page.dart'; |
| 30 | import '../pages/shopping/view.dart'; | 31 | import '../pages/shopping/view.dart'; |
| 32 | +import '../pages/unit/view.dart'; | ||
| 31 | import '../pages/user/setting/delete_account_page.dart'; | 33 | import '../pages/user/setting/delete_account_page.dart'; |
| 32 | import '../pages/user/setting/reback_page.dart'; | 34 | import '../pages/user/setting/reback_page.dart'; |
| 33 | -import '../utils/log_util.dart'; | ||
| 34 | 35 | ||
| 35 | class AppRouteName { | 36 | class AppRouteName { |
| 36 | static const String splash = 'splash'; | 37 | static const String splash = 'splash'; |
| @@ -43,7 +44,8 @@ class AppRouteName { | @@ -43,7 +44,8 @@ class AppRouteName { | ||
| 43 | /// 设置密码,修改密码;不要自己调用,使用[SetPassWordPage.push]方法,隐藏这种实现 | 44 | /// 设置密码,修改密码;不要自己调用,使用[SetPassWordPage.push]方法,隐藏这种实现 |
| 44 | //static const String setPwd = 'setPwd'; | 45 | //static const String setPwd = 'setPwd'; |
| 45 | static const String webView = 'webView'; | 46 | static const String webView = 'webView'; |
| 46 | - static const String lesson = 'lesson'; | 47 | + static const String unit = 'courseUnits'; |
| 48 | + static const String lesson = 'courseModules'; | ||
| 47 | static const String listen = 'listen'; | 49 | static const String listen = 'listen'; |
| 48 | static const String shop = 'shop'; | 50 | static const String shop = 'shop'; |
| 49 | static const String exLesson = 'exLesson'; | 51 | static const String exLesson = 'exLesson'; |
| @@ -100,9 +102,9 @@ class AppRouter { | @@ -100,9 +102,9 @@ class AppRouter { | ||
| 100 | case AppRouteName.games: | 102 | case AppRouteName.games: |
| 101 | return CupertinoPageRoute(builder: (_) => const GamesPage()); | 103 | return CupertinoPageRoute(builder: (_) => const GamesPage()); |
| 102 | case AppRouteName.home: | 104 | case AppRouteName.home: |
| 103 | - var moduleId = ''; | 105 | + int? moduleId; |
| 104 | if (settings.arguments != null) { | 106 | if (settings.arguments != null) { |
| 105 | - moduleId = (settings.arguments as Map)['moduleId'] as String; | 107 | + moduleId = (settings.arguments as Map).getOrNull('moduleId') as int?; |
| 106 | } | 108 | } |
| 107 | return CupertinoPageRoute( | 109 | return CupertinoPageRoute( |
| 108 | builder: (_) => HomePage( | 110 | builder: (_) => HomePage( |
| @@ -112,6 +114,12 @@ class AppRouter { | @@ -112,6 +114,12 @@ class AppRouter { | ||
| 112 | return CupertinoPageRoute(builder: (_) => const ForgetPasswordHomePage()); | 114 | return CupertinoPageRoute(builder: (_) => const ForgetPasswordHomePage()); |
| 113 | case AppRouteName.lesson: | 115 | case AppRouteName.lesson: |
| 114 | return CupertinoPageRoute(builder: (_) => const LessonPage()); | 116 | return CupertinoPageRoute(builder: (_) => const LessonPage()); |
| 117 | + case AppRouteName.unit: | ||
| 118 | + CourseModuleEntity courseEntity = CourseModuleEntity(); | ||
| 119 | + if (settings.arguments != null) { | ||
| 120 | + courseEntity = (settings.arguments as Map).getOrNull('courseModuleEntity') as CourseModuleEntity; | ||
| 121 | + } | ||
| 122 | + return CupertinoPageRoute(builder: (_) => UnitPage(courseEntity: courseEntity)); | ||
| 115 | case AppRouteName.listen: | 123 | case AppRouteName.listen: |
| 116 | return CupertinoPageRoute(builder: (_) => const ListenPage()); | 124 | return CupertinoPageRoute(builder: (_) => const ListenPage()); |
| 117 | case AppRouteName.shop: | 125 | case AppRouteName.shop: |