Commit 4224b3f8899ff5a32b51162f1112cba607b76a44

Authored by 吴启风
1 parent 354ac7e6

feat:支付详情页ui

assets/images/apple_pay.png 0 → 100644

1.78 KB

assets/images/btn_pay.png 0 → 100644

45.8 KB

assets/images/checked.png 0 → 100644

3.2 KB

assets/images/unchecked.png 0 → 100644

3.12 KB

assets/images/weixin.png 0 → 100644

3.79 KB

assets/images/zhifubao.png 0 → 100644

4.64 KB

lib/app/app.dart
... ... @@ -2,8 +2,7 @@ import 'package:flutter/material.dart';
2 2 import 'package:flutter_bloc/flutter_bloc.dart';
3 3 import 'package:flutter_easyloading/flutter_easyloading.dart';
4 4 import 'package:flutter_screenutil/flutter_screenutil.dart';
5   -import 'package:responsive_framework/breakpoint.dart';
6   -import 'package:responsive_framework/responsive_breakpoints.dart';
  5 +import 'package:responsive_framework/responsive_framework.dart';
7 6 import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart';
8 7 import 'package:wow_english/common/widgets/hide_keyboard_widget.dart';
9 8 import 'package:wow_english/pages/tab/blocs/tab_bloc.dart';
... ...
lib/generated/json/aliyun_oss_upload_sts_entity.g.dart
1 1 import 'package:wow_english/generated/json/base/json_convert_content.dart';
2 2 import 'package:wow_english/models/aliyun_oss_upload_sts_entity.dart';
3 3  
4   -AliyunOssUploadStsEntity $AliyunOssUploadStsEntityFromJson(Map<String, dynamic> json) {
5   - final AliyunOssUploadStsEntity aliyunOssUploadStsEntity = AliyunOssUploadStsEntity();
6   - final String? securityToken = jsonConvert.convert<String>(json['securityToken']);
7   - if (securityToken != null) {
8   - aliyunOssUploadStsEntity.securityToken = securityToken;
9   - }
10   - final String? expiration = jsonConvert.convert<String>(json['expiration']);
11   - if (expiration != null) {
12   - aliyunOssUploadStsEntity.expiration = expiration;
13   - }
14   - final String? endpoint = jsonConvert.convert<String>(json['endpoint']);
15   - if (endpoint != null) {
16   - aliyunOssUploadStsEntity.endpoint = endpoint;
17   - }
18   - final String? fileKey = jsonConvert.convert<String>(json['fileKey']);
19   - if (fileKey != null) {
20   - aliyunOssUploadStsEntity.fileKey = fileKey;
21   - }
22   - final String? accessKeyId = jsonConvert.convert<String>(json['accessKeyId']);
23   - if (accessKeyId != null) {
24   - aliyunOssUploadStsEntity.accessKeyId = accessKeyId;
25   - }
26   - final String? accessKeySecret = jsonConvert.convert<String>(json['accessKeySecret']);
27   - if (accessKeySecret != null) {
28   - aliyunOssUploadStsEntity.accessKeySecret = accessKeySecret;
29   - }
30   - final String? bucket = jsonConvert.convert<String>(json['bucket']);
31   - if (bucket != null) {
32   - aliyunOssUploadStsEntity.bucket = bucket;
33   - }
34   - final String? ossDomain = jsonConvert.convert<String>(json['ossDomain']);
35   - if (ossDomain != null) {
36   - aliyunOssUploadStsEntity.ossDomain = ossDomain;
37   - }
38   - final String? host = jsonConvert.convert<String>(json['host']);
39   - if (host != null) {
40   - aliyunOssUploadStsEntity.host = host;
41   - }
42   - final AliyunOssUploadStsCallbackParam? callbackParam = jsonConvert.convert<AliyunOssUploadStsCallbackParam>(json['callbackParam']);
43   - if (callbackParam != null) {
44   - aliyunOssUploadStsEntity.callbackParam = callbackParam;
45   - }
46   - return aliyunOssUploadStsEntity;
  4 +AliyunOssUploadStsEntity $AliyunOssUploadStsEntityFromJson(
  5 + Map<String, dynamic> json) {
  6 + final AliyunOssUploadStsEntity aliyunOssUploadStsEntity = AliyunOssUploadStsEntity();
  7 + final String? securityToken = jsonConvert.convert<String>(
  8 + json['securityToken']);
  9 + if (securityToken != null) {
  10 + aliyunOssUploadStsEntity.securityToken = securityToken;
  11 + }
  12 + final String? expiration = jsonConvert.convert<String>(json['expiration']);
  13 + if (expiration != null) {
  14 + aliyunOssUploadStsEntity.expiration = expiration;
  15 + }
  16 + final String? endpoint = jsonConvert.convert<String>(json['endpoint']);
  17 + if (endpoint != null) {
  18 + aliyunOssUploadStsEntity.endpoint = endpoint;
  19 + }
  20 + final String? fileKey = jsonConvert.convert<String>(json['fileKey']);
  21 + if (fileKey != null) {
  22 + aliyunOssUploadStsEntity.fileKey = fileKey;
  23 + }
  24 + final String? accessKeyId = jsonConvert.convert<String>(json['accessKeyId']);
  25 + if (accessKeyId != null) {
  26 + aliyunOssUploadStsEntity.accessKeyId = accessKeyId;
  27 + }
  28 + final String? accessKeySecret = jsonConvert.convert<String>(
  29 + json['accessKeySecret']);
  30 + if (accessKeySecret != null) {
  31 + aliyunOssUploadStsEntity.accessKeySecret = accessKeySecret;
  32 + }
  33 + final String? bucket = jsonConvert.convert<String>(json['bucket']);
  34 + if (bucket != null) {
  35 + aliyunOssUploadStsEntity.bucket = bucket;
  36 + }
  37 + final String? ossDomain = jsonConvert.convert<String>(json['ossDomain']);
  38 + if (ossDomain != null) {
  39 + aliyunOssUploadStsEntity.ossDomain = ossDomain;
  40 + }
  41 + final String? host = jsonConvert.convert<String>(json['host']);
  42 + if (host != null) {
  43 + aliyunOssUploadStsEntity.host = host;
  44 + }
  45 + final AliyunOssUploadStsCallbackParam? callbackParam = jsonConvert.convert<
  46 + AliyunOssUploadStsCallbackParam>(json['callbackParam']);
  47 + if (callbackParam != null) {
  48 + aliyunOssUploadStsEntity.callbackParam = callbackParam;
  49 + }
  50 + return aliyunOssUploadStsEntity;
47 51 }
48 52  
49   -Map<String, dynamic> $AliyunOssUploadStsEntityToJson(AliyunOssUploadStsEntity entity) {
50   - final Map<String, dynamic> data = <String, dynamic>{};
51   - data['securityToken'] = entity.securityToken;
52   - data['expiration'] = entity.expiration;
53   - data['endpoint'] = entity.endpoint;
54   - data['fileKey'] = entity.fileKey;
55   - data['accessKeyId'] = entity.accessKeyId;
56   - data['accessKeySecret'] = entity.accessKeySecret;
57   - data['bucket'] = entity.bucket;
58   - data['ossDomain'] = entity.ossDomain;
59   - data['host'] = entity.host;
60   - data['callbackParam'] = entity.callbackParam.toJson();
61   - return data;
  53 +Map<String, dynamic> $AliyunOssUploadStsEntityToJson(
  54 + AliyunOssUploadStsEntity entity) {
  55 + final Map<String, dynamic> data = <String, dynamic>{};
  56 + data['securityToken'] = entity.securityToken;
  57 + data['expiration'] = entity.expiration;
  58 + data['endpoint'] = entity.endpoint;
  59 + data['fileKey'] = entity.fileKey;
  60 + data['accessKeyId'] = entity.accessKeyId;
  61 + data['accessKeySecret'] = entity.accessKeySecret;
  62 + data['bucket'] = entity.bucket;
  63 + data['ossDomain'] = entity.ossDomain;
  64 + data['host'] = entity.host;
  65 + data['callbackParam'] = entity.callbackParam.toJson();
  66 + return data;
62 67 }
63 68  
64   -AliyunOssUploadStsCallbackParam $AliyunOssUploadStsCallbackParamFromJson(Map<String, dynamic> json) {
65   - final AliyunOssUploadStsCallbackParam aliyunOssUploadStsCallbackParam = AliyunOssUploadStsCallbackParam();
66   - final String? callbackBody = jsonConvert.convert<String>(json['callbackBody']);
67   - if (callbackBody != null) {
68   - aliyunOssUploadStsCallbackParam.callbackBody = callbackBody;
69   - }
70   - final String? callbackBodyType = jsonConvert.convert<String>(json['callbackBodyType']);
71   - if (callbackBodyType != null) {
72   - aliyunOssUploadStsCallbackParam.callbackBodyType = callbackBodyType;
73   - }
74   - final String? callbackUrl = jsonConvert.convert<String>(json['callbackUrl']);
75   - if (callbackUrl != null) {
76   - aliyunOssUploadStsCallbackParam.callbackUrl = callbackUrl;
77   - }
78   - return aliyunOssUploadStsCallbackParam;
  69 +extension AliyunOssUploadStsEntityExtension on AliyunOssUploadStsEntity {
  70 + AliyunOssUploadStsEntity copyWith({
  71 + String? securityToken,
  72 + String? expiration,
  73 + String? endpoint,
  74 + String? fileKey,
  75 + String? accessKeyId,
  76 + String? accessKeySecret,
  77 + String? bucket,
  78 + String? ossDomain,
  79 + String? host,
  80 + AliyunOssUploadStsCallbackParam? callbackParam,
  81 + }) {
  82 + return AliyunOssUploadStsEntity()
  83 + ..securityToken = securityToken ?? this.securityToken
  84 + ..expiration = expiration ?? this.expiration
  85 + ..endpoint = endpoint ?? this.endpoint
  86 + ..fileKey = fileKey ?? this.fileKey
  87 + ..accessKeyId = accessKeyId ?? this.accessKeyId
  88 + ..accessKeySecret = accessKeySecret ?? this.accessKeySecret
  89 + ..bucket = bucket ?? this.bucket
  90 + ..ossDomain = ossDomain ?? this.ossDomain
  91 + ..host = host ?? this.host
  92 + ..callbackParam = callbackParam ?? this.callbackParam;
  93 + }
79 94 }
80 95  
81   -Map<String, dynamic> $AliyunOssUploadStsCallbackParamToJson(AliyunOssUploadStsCallbackParam entity) {
82   - final Map<String, dynamic> data = <String, dynamic>{};
83   - data['callbackBody'] = entity.callbackBody;
84   - data['callbackBodyType'] = entity.callbackBodyType;
85   - data['callbackUrl'] = entity.callbackUrl;
86   - return data;
  96 +AliyunOssUploadStsCallbackParam $AliyunOssUploadStsCallbackParamFromJson(
  97 + Map<String, dynamic> json) {
  98 + final AliyunOssUploadStsCallbackParam aliyunOssUploadStsCallbackParam = AliyunOssUploadStsCallbackParam();
  99 + final String? callbackBody = jsonConvert.convert<String>(
  100 + json['callbackBody']);
  101 + if (callbackBody != null) {
  102 + aliyunOssUploadStsCallbackParam.callbackBody = callbackBody;
  103 + }
  104 + final String? callbackBodyType = jsonConvert.convert<String>(
  105 + json['callbackBodyType']);
  106 + if (callbackBodyType != null) {
  107 + aliyunOssUploadStsCallbackParam.callbackBodyType = callbackBodyType;
  108 + }
  109 + final String? callbackUrl = jsonConvert.convert<String>(json['callbackUrl']);
  110 + if (callbackUrl != null) {
  111 + aliyunOssUploadStsCallbackParam.callbackUrl = callbackUrl;
  112 + }
  113 + return aliyunOssUploadStsCallbackParam;
87 114 }
  115 +
  116 +Map<String, dynamic> $AliyunOssUploadStsCallbackParamToJson(
  117 + AliyunOssUploadStsCallbackParam entity) {
  118 + final Map<String, dynamic> data = <String, dynamic>{};
  119 + data['callbackBody'] = entity.callbackBody;
  120 + data['callbackBodyType'] = entity.callbackBodyType;
  121 + data['callbackUrl'] = entity.callbackUrl;
  122 + return data;
  123 +}
  124 +
  125 +extension AliyunOssUploadStsCallbackParamExtension on AliyunOssUploadStsCallbackParam {
  126 + AliyunOssUploadStsCallbackParam copyWith({
  127 + String? callbackBody,
  128 + String? callbackBodyType,
  129 + String? callbackUrl,
  130 + }) {
  131 + return AliyunOssUploadStsCallbackParam()
  132 + ..callbackBody = callbackBody ?? this.callbackBody
  133 + ..callbackBodyType = callbackBodyType ?? this.callbackBodyType
  134 + ..callbackUrl = callbackUrl ?? this.callbackUrl;
  135 + }
  136 +}
88 137 \ No newline at end of file
... ...
lib/generated/json/base/json_convert_content.dart
... ... @@ -10,30 +10,47 @@ import &#39;package:wow_english/models/course_module_entity.dart&#39;;
10 10 import 'package:wow_english/models/course_process_entity.dart';
11 11 import 'package:wow_english/models/follow_read_entity.dart';
12 12 import 'package:wow_english/models/listen_entity.dart';
  13 +import 'package:wow_english/models/product_entity.dart';
13 14 import 'package:wow_english/models/read_content_entity.dart';
14 15 import 'package:wow_english/models/user_entity.dart';
15 16  
16 17 JsonConvert jsonConvert = JsonConvert();
  18 +
17 19 typedef JsonConvertFunction<T> = T Function(Map<String, dynamic> json);
18 20 typedef EnumConvertFunction<T> = T Function(String value);
  21 +typedef ConvertExceptionHandler = void Function(Object error, StackTrace stackTrace);
  22 +extension MapSafeExt<K, V> on Map<K, V> {
  23 + T? getOrNull<T>(K? key) {
  24 + if (!containsKey(key) || key == null) {
  25 + return null;
  26 + } else {
  27 + return this[key] as T?;
  28 + }
  29 + }
  30 +}
19 31  
20 32 class JsonConvert {
21   - static final Map<String, JsonConvertFunction> convertFuncMap = {
22   - (AliyunOssUploadStsEntity).toString(): AliyunOssUploadStsEntity.fromJson,
23   - (AliyunOssUploadStsCallbackParam).toString(): AliyunOssUploadStsCallbackParam.fromJson,
24   - (CourseEntity).toString(): CourseEntity.fromJson,
25   - (CourseCourseLessons).toString(): CourseCourseLessons.fromJson,
26   - (CourseModuleEntity).toString(): CourseModuleEntity.fromJson,
27   - (CourseProcessEntity).toString(): CourseProcessEntity.fromJson,
28   - (CourseProcessReadings).toString(): CourseProcessReadings.fromJson,
29   - (CourseProcessTopics).toString(): CourseProcessTopics.fromJson,
30   - (CourseProcessTopicsTopicAnswerList).toString(): CourseProcessTopicsTopicAnswerList.fromJson,
31   - (CourseProcessVideos).toString(): CourseProcessVideos.fromJson,
32   - (FollowReadEntity).toString(): FollowReadEntity.fromJson,
33   - (ListenEntity).toString(): ListenEntity.fromJson,
34   - (ReadContentEntity).toString(): ReadContentEntity.fromJson,
35   - (UserEntity).toString(): UserEntity.fromJson,
36   - };
  33 + static ConvertExceptionHandler? onError;
  34 + JsonConvertClassCollection convertFuncMap = JsonConvertClassCollection();
  35 +
  36 + /// When you are in the development, to generate a new model class, hot-reload doesn't find new generation model class, you can build on MaterialApp method called jsonConvert. ReassembleConvertFuncMap (); This method only works in a development environment
  37 + /// https://flutter.cn/docs/development/tools/hot-reload
  38 + /// class MyApp extends StatelessWidget {
  39 + /// const MyApp({Key? key})
  40 + /// : super(key: key);
  41 + ///
  42 + /// @override
  43 + /// Widget build(BuildContext context) {
  44 + /// jsonConvert.reassembleConvertFuncMap();
  45 + /// return MaterialApp();
  46 + /// }
  47 + /// }
  48 + void reassembleConvertFuncMap() {
  49 + bool isReleaseMode = const bool.fromEnvironment('dart.vm.product');
  50 + if (!isReleaseMode) {
  51 + convertFuncMap = JsonConvertClassCollection();
  52 + }
  53 + }
37 54  
38 55 T? convert<T>(dynamic value, {EnumConvertFunction? enumConvert}) {
39 56 if (value == null) {
... ... @@ -46,30 +63,43 @@ class JsonConvert {
46 63 return _asT<T>(value, enumConvert: enumConvert);
47 64 } catch (e, stackTrace) {
48 65 debugPrint('asT<$T> $e $stackTrace');
  66 + if (onError != null) {
  67 + onError!(e, stackTrace);
  68 + }
49 69 return null;
50 70 }
51 71 }
52 72  
53   - List<T?>? convertList<T>(List<dynamic>? value, {EnumConvertFunction? enumConvert}) {
  73 + List<T?>? convertList<T>(List<dynamic>? value,
  74 + {EnumConvertFunction? enumConvert}) {
54 75 if (value == null) {
55 76 return null;
56 77 }
57 78 try {
58   - return value.map((dynamic e) => _asT<T>(e,enumConvert: enumConvert)).toList();
  79 + return value.map((dynamic e) => _asT<T>(e, enumConvert: enumConvert))
  80 + .toList();
59 81 } catch (e, stackTrace) {
60 82 debugPrint('asT<$T> $e $stackTrace');
  83 + if (onError != null) {
  84 + onError!(e, stackTrace);
  85 + }
61 86 return <T>[];
62 87 }
63 88 }
64 89  
65   -List<T>? convertListNotNull<T>(dynamic value, {EnumConvertFunction? enumConvert}) {
  90 + List<T>? convertListNotNull<T>(dynamic value,
  91 + {EnumConvertFunction? enumConvert}) {
66 92 if (value == null) {
67 93 return null;
68 94 }
69 95 try {
70   - return (value as List<dynamic>).map((dynamic e) => _asT<T>(e,enumConvert: enumConvert)!).toList();
  96 + return (value as List<dynamic>).map((dynamic e) =>
  97 + _asT<T>(e, enumConvert: enumConvert)!).toList();
71 98 } catch (e, stackTrace) {
72 99 debugPrint('asT<$T> $e $stackTrace');
  100 + if (onError != null) {
  101 + onError!(e, stackTrace);
  102 + }
73 103 return <T>[];
74 104 }
75 105 }
... ... @@ -102,68 +132,126 @@ List&lt;T&gt;? convertListNotNull&lt;T&gt;(dynamic value, {EnumConvertFunction? enumConvert}
102 132 return value as T;
103 133 } else {
104 134 if (convertFuncMap.containsKey(type)) {
105   - return convertFuncMap[type]!(Map<String, dynamic>.from(value)) as T;
  135 + if (value == null) {
  136 + return null;
  137 + }
  138 + return convertFuncMap[type]!(value as Map<String, dynamic>) as T;
106 139 } else {
107   - throw UnimplementedError('$type unimplemented');
  140 + throw UnimplementedError(
  141 + '$type unimplemented,you can try running the app again');
108 142 }
109 143 }
110 144 }
111 145  
112   - //list is returned by type
113   - static M? _getListChildType<M>(List<Map<String, dynamic>> data) {
114   - if(<AliyunOssUploadStsEntity>[] is M){
115   - return data.map<AliyunOssUploadStsEntity>((Map<String, dynamic> e) => AliyunOssUploadStsEntity.fromJson(e)).toList() as M;
116   - }
117   - if(<AliyunOssUploadStsCallbackParam>[] is M){
118   - return data.map<AliyunOssUploadStsCallbackParam>((Map<String, dynamic> e) => AliyunOssUploadStsCallbackParam.fromJson(e)).toList() as M;
119   - }
120   - if(<CourseEntity>[] is M){
121   - return data.map<CourseEntity>((Map<String, dynamic> e) => CourseEntity.fromJson(e)).toList() as M;
122   - }
123   - if(<CourseCourseLessons>[] is M){
124   - return data.map<CourseCourseLessons>((Map<String, dynamic> e) => CourseCourseLessons.fromJson(e)).toList() as M;
125   - }
126   - if(<CourseModuleEntity>[] is M){
127   - return data.map<CourseModuleEntity>((Map<String, dynamic> e) => CourseModuleEntity.fromJson(e)).toList() as M;
128   - }
129   - if(<CourseProcessEntity>[] is M){
130   - return data.map<CourseProcessEntity>((Map<String, dynamic> e) => CourseProcessEntity.fromJson(e)).toList() as M;
131   - }
132   - if(<CourseProcessReadings>[] is M){
133   - return data.map<CourseProcessReadings>((Map<String, dynamic> e) => CourseProcessReadings.fromJson(e)).toList() as M;
134   - }
135   - if(<CourseProcessTopics>[] is M){
136   - return data.map<CourseProcessTopics>((Map<String, dynamic> e) => CourseProcessTopics.fromJson(e)).toList() as M;
137   - }
138   - if(<CourseProcessTopicsTopicAnswerList>[] is M){
139   - return data.map<CourseProcessTopicsTopicAnswerList>((Map<String, dynamic> e) => CourseProcessTopicsTopicAnswerList.fromJson(e)).toList() as M;
140   - }
141   - if(<CourseProcessVideos>[] is M){
142   - return data.map<CourseProcessVideos>((Map<String, dynamic> e) => CourseProcessVideos.fromJson(e)).toList() as M;
143   - }
144   - if(<FollowReadEntity>[] is M){
145   - return data.map<FollowReadEntity>((Map<String, dynamic> e) => FollowReadEntity.fromJson(e)).toList() as M;
146   - }
147   - if(<ListenEntity>[] is M){
148   - return data.map<ListenEntity>((Map<String, dynamic> e) => ListenEntity.fromJson(e)).toList() as M;
149   - }
150   - if(<ReadContentEntity>[] is M){
151   - return data.map<ReadContentEntity>((Map<String, dynamic> e) => ReadContentEntity.fromJson(e)).toList() as M;
152   - }
153   - if(<UserEntity>[] is M){
154   - return data.map<UserEntity>((Map<String, dynamic> e) => UserEntity.fromJson(e)).toList() as M;
155   - }
156   -
157   - debugPrint("${M.toString()} not found");
158   -
159   - return null;
160   -}
  146 + //list is returned by type
  147 + static M? _getListChildType<M>(List<Map<String, dynamic>> data) {
  148 + if (<AliyunOssUploadStsEntity>[] is M) {
  149 + return data.map<AliyunOssUploadStsEntity>((Map<String, dynamic> e) =>
  150 + AliyunOssUploadStsEntity.fromJson(e)).toList() as M;
  151 + }
  152 + if (<AliyunOssUploadStsCallbackParam>[] is M) {
  153 + return data.map<AliyunOssUploadStsCallbackParam>((
  154 + Map<String, dynamic> e) =>
  155 + AliyunOssUploadStsCallbackParam.fromJson(e)).toList() as M;
  156 + }
  157 + if (<CourseEntity>[] is M) {
  158 + return data.map<CourseEntity>((Map<String, dynamic> e) =>
  159 + CourseEntity.fromJson(e)).toList() as M;
  160 + }
  161 + if (<CourseCourseLessons>[] is M) {
  162 + return data.map<CourseCourseLessons>((Map<String, dynamic> e) =>
  163 + CourseCourseLessons.fromJson(e)).toList() as M;
  164 + }
  165 + if (<CourseModuleEntity>[] is M) {
  166 + return data.map<CourseModuleEntity>((Map<String, dynamic> e) =>
  167 + CourseModuleEntity.fromJson(e)).toList() as M;
  168 + }
  169 + if (<CourseProcessEntity>[] is M) {
  170 + return data.map<CourseProcessEntity>((Map<String, dynamic> e) =>
  171 + CourseProcessEntity.fromJson(e)).toList() as M;
  172 + }
  173 + if (<CourseProcessReadings>[] is M) {
  174 + return data.map<CourseProcessReadings>((Map<String, dynamic> e) =>
  175 + CourseProcessReadings.fromJson(e)).toList() as M;
  176 + }
  177 + if (<CourseProcessTopics>[] is M) {
  178 + return data.map<CourseProcessTopics>((Map<String, dynamic> e) =>
  179 + CourseProcessTopics.fromJson(e)).toList() as M;
  180 + }
  181 + if (<CourseProcessTopicsTopicAnswerList>[] is M) {
  182 + return data.map<CourseProcessTopicsTopicAnswerList>((
  183 + Map<String, dynamic> e) =>
  184 + CourseProcessTopicsTopicAnswerList.fromJson(e)).toList() as M;
  185 + }
  186 + if (<CourseProcessVideos>[] is M) {
  187 + return data.map<CourseProcessVideos>((Map<String, dynamic> e) =>
  188 + CourseProcessVideos.fromJson(e)).toList() as M;
  189 + }
  190 + if (<FollowReadEntity>[] is M) {
  191 + return data.map<FollowReadEntity>((Map<String, dynamic> e) =>
  192 + FollowReadEntity.fromJson(e)).toList() as M;
  193 + }
  194 + if (<ListenEntity>[] is M) {
  195 + return data.map<ListenEntity>((Map<String, dynamic> e) =>
  196 + ListenEntity.fromJson(e)).toList() as M;
  197 + }
  198 + if (<ProductEntity>[] is M) {
  199 + return data.map<ProductEntity>((Map<String, dynamic> e) =>
  200 + ProductEntity.fromJson(e)).toList() as M;
  201 + }
  202 + if (<ReadContentEntity>[] is M) {
  203 + return data.map<ReadContentEntity>((Map<String, dynamic> e) =>
  204 + ReadContentEntity.fromJson(e)).toList() as M;
  205 + }
  206 + if (<UserEntity>[] is M) {
  207 + return data.map<UserEntity>((Map<String, dynamic> e) =>
  208 + UserEntity.fromJson(e)).toList() as M;
  209 + }
161 210  
162   - static M? fromJsonAsT<M>(dynamic json) {
163   - if (json is List) {
164   - return _getListChildType<M>(json.map((e) => e as Map<String, dynamic>).toList());
165   - } else {
166   - return jsonConvert.convert<M>(json);
167   - }
168   - }
  211 + debugPrint("$M not found");
  212 +
  213 + return null;
  214 + }
  215 +
  216 + static M? fromJsonAsT<M>(dynamic json) {
  217 + if (json is M) {
  218 + return json;
  219 + }
  220 + if (json is List) {
  221 + return _getListChildType<M>(
  222 + json.map((dynamic e) => e as Map<String, dynamic>).toList());
  223 + } else {
  224 + return jsonConvert.convert<M>(json);
  225 + }
  226 + }
169 227 }
  228 +
  229 +class JsonConvertClassCollection {
  230 + Map<String, JsonConvertFunction> convertFuncMap = {
  231 + (AliyunOssUploadStsEntity).toString(): AliyunOssUploadStsEntity.fromJson,
  232 + (AliyunOssUploadStsCallbackParam)
  233 + .toString(): AliyunOssUploadStsCallbackParam.fromJson,
  234 + (CourseEntity).toString(): CourseEntity.fromJson,
  235 + (CourseCourseLessons).toString(): CourseCourseLessons.fromJson,
  236 + (CourseModuleEntity).toString(): CourseModuleEntity.fromJson,
  237 + (CourseProcessEntity).toString(): CourseProcessEntity.fromJson,
  238 + (CourseProcessReadings).toString(): CourseProcessReadings.fromJson,
  239 + (CourseProcessTopics).toString(): CourseProcessTopics.fromJson,
  240 + (CourseProcessTopicsTopicAnswerList)
  241 + .toString(): CourseProcessTopicsTopicAnswerList.fromJson,
  242 + (CourseProcessVideos).toString(): CourseProcessVideos.fromJson,
  243 + (FollowReadEntity).toString(): FollowReadEntity.fromJson,
  244 + (ListenEntity).toString(): ListenEntity.fromJson,
  245 + (ProductEntity).toString(): ProductEntity.fromJson,
  246 + (ReadContentEntity).toString(): ReadContentEntity.fromJson,
  247 + (UserEntity).toString(): UserEntity.fromJson,
  248 + };
  249 +
  250 + bool containsKey(String type) {
  251 + return convertFuncMap.containsKey(type);
  252 + }
  253 +
  254 + JsonConvertFunction? operator [](String key) {
  255 + return convertFuncMap[key];
  256 + }
  257 +}
170 258 \ No newline at end of file
... ...
lib/generated/json/base/json_field.dart
... ... @@ -4,10 +4,14 @@
4 4  
5 5 // This file is automatically generated. DO NOT EDIT, all your changes would be lost.
6 6  
7   -class JsonSerializable{
8   - const JsonSerializable();
  7 +import 'package:meta/meta_meta.dart';
  8 +
  9 +@Target({TargetKind.classType})
  10 +class JsonSerializable {
  11 + const JsonSerializable();
9 12 }
10 13  
  14 +@Target({TargetKind.field})
11 15 class JSONField {
12 16 //Specify the parse field name
13 17 final String? name;
... ... @@ -18,8 +22,11 @@ class JSONField {
18 22 //Whether to participate in fromMap
19 23 final bool? deserialize;
20 24  
  25 + //Whether to participate in copyWith
  26 + final bool? copyWith;
  27 +
21 28 //Enumeration or not
22 29 final bool? isEnum;
23 30  
24   - const JSONField({this.name, this.serialize, this.deserialize, this.isEnum});
  31 + const JSONField({this.name, this.serialize, this.deserialize, this.isEnum, this.copyWith});
25 32 }
... ...
lib/generated/json/course_entity.g.dart
... ... @@ -2,116 +2,181 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/course_entity.dart';
3 3  
4 4 CourseEntity $CourseEntityFromJson(Map<String, dynamic> json) {
5   - final CourseEntity courseEntity = CourseEntity();
6   - final List<CourseCourseLessons>? courseLessons = jsonConvert.convertListNotNull<CourseCourseLessons>(json['courseLessons']);
7   - if (courseLessons != null) {
8   - courseEntity.courseLessons = courseLessons;
9   - }
10   - final int? nowCourseLesson = jsonConvert.convert<int>(json['nowCourseLesson']);
11   - if (nowCourseLesson != null) {
12   - courseEntity.nowCourseLesson = nowCourseLesson;
13   - }
14   - final int? nowCourseModuleId = jsonConvert.convert<int>(json['nowCourseModuleId']);
15   - if (nowCourseModuleId != null) {
16   - courseEntity.nowCourseModuleId = nowCourseModuleId;
17   - }
18   - final String? nowCourseModuleName = jsonConvert.convert<String>(json['nowCourseModuleName']);
19   - if (nowCourseModuleName != null) {
20   - courseEntity.nowCourseModuleName = nowCourseModuleName;
21   - }
22   - final int? totalCourseLesson = jsonConvert.convert<int>(json['totalCourseLesson']);
23   - if (totalCourseLesson != null) {
24   - courseEntity.totalCourseLesson = totalCourseLesson;
25   - }
26   - final String? courseModuleThemeColor = jsonConvert.convert<String>(json['courseModuleThemeColor']);
27   - if (courseModuleThemeColor != null) {
28   - courseEntity.courseModuleThemeColor = courseModuleThemeColor;
29   - }
30   - final String? courseModuleCode = jsonConvert.convert<String>(json['courseModuleCode']);
31   - if (courseModuleCode != null) {
32   - courseEntity.courseModuleCode = courseModuleCode;
33   - }
34   - return courseEntity;
  5 + final CourseEntity courseEntity = CourseEntity();
  6 + final List<
  7 + CourseCourseLessons>? courseLessons = (json['courseLessons'] as List<
  8 + dynamic>?)
  9 + ?.map(
  10 + (e) =>
  11 + jsonConvert.convert<CourseCourseLessons>(e) as CourseCourseLessons)
  12 + .toList();
  13 + if (courseLessons != null) {
  14 + courseEntity.courseLessons = courseLessons;
  15 + }
  16 + final int? nowCourseLesson = jsonConvert.convert<int>(
  17 + json['nowCourseLesson']);
  18 + if (nowCourseLesson != null) {
  19 + courseEntity.nowCourseLesson = nowCourseLesson;
  20 + }
  21 + final int? nowCourseModuleId = jsonConvert.convert<int>(
  22 + json['nowCourseModuleId']);
  23 + if (nowCourseModuleId != null) {
  24 + courseEntity.nowCourseModuleId = nowCourseModuleId;
  25 + }
  26 + final String? nowCourseModuleName = jsonConvert.convert<String>(
  27 + json['nowCourseModuleName']);
  28 + if (nowCourseModuleName != null) {
  29 + courseEntity.nowCourseModuleName = nowCourseModuleName;
  30 + }
  31 + final int? totalCourseLesson = jsonConvert.convert<int>(
  32 + json['totalCourseLesson']);
  33 + if (totalCourseLesson != null) {
  34 + courseEntity.totalCourseLesson = totalCourseLesson;
  35 + }
  36 + final String? courseModuleThemeColor = jsonConvert.convert<String>(
  37 + json['courseModuleThemeColor']);
  38 + if (courseModuleThemeColor != null) {
  39 + courseEntity.courseModuleThemeColor = courseModuleThemeColor;
  40 + }
  41 + final String? courseModuleCode = jsonConvert.convert<String>(
  42 + json['courseModuleCode']);
  43 + if (courseModuleCode != null) {
  44 + courseEntity.courseModuleCode = courseModuleCode;
  45 + }
  46 + return courseEntity;
35 47 }
36 48  
37 49 Map<String, dynamic> $CourseEntityToJson(CourseEntity entity) {
38   - final Map<String, dynamic> data = <String, dynamic>{};
39   - data['courseLessons'] = entity.courseLessons?.map((v) => v.toJson()).toList();
40   - data['nowCourseLesson'] = entity.nowCourseLesson;
41   - data['nowCourseModuleId'] = entity.nowCourseModuleId;
42   - data['nowCourseModuleName'] = entity.nowCourseModuleName;
43   - data['totalCourseLesson'] = entity.totalCourseLesson;
44   - data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
45   - data['courseModuleCode'] = entity.courseModuleCode;
46   - return data;
  50 + final Map<String, dynamic> data = <String, dynamic>{};
  51 + data['courseLessons'] = entity.courseLessons?.map((v) => v.toJson()).toList();
  52 + data['nowCourseLesson'] = entity.nowCourseLesson;
  53 + data['nowCourseModuleId'] = entity.nowCourseModuleId;
  54 + data['nowCourseModuleName'] = entity.nowCourseModuleName;
  55 + data['totalCourseLesson'] = entity.totalCourseLesson;
  56 + data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
  57 + data['courseModuleCode'] = entity.courseModuleCode;
  58 + return data;
  59 +}
  60 +
  61 +extension CourseEntityExtension on CourseEntity {
  62 + CourseEntity copyWith({
  63 + List<CourseCourseLessons>? courseLessons,
  64 + int? nowCourseLesson,
  65 + int? nowCourseModuleId,
  66 + String? nowCourseModuleName,
  67 + int? totalCourseLesson,
  68 + String? courseModuleThemeColor,
  69 + String? courseModuleCode,
  70 + }) {
  71 + return CourseEntity()
  72 + ..courseLessons = courseLessons ?? this.courseLessons
  73 + ..nowCourseLesson = nowCourseLesson ?? this.nowCourseLesson
  74 + ..nowCourseModuleId = nowCourseModuleId ?? this.nowCourseModuleId
  75 + ..nowCourseModuleName = nowCourseModuleName ?? this.nowCourseModuleName
  76 + ..totalCourseLesson = totalCourseLesson ?? this.totalCourseLesson
  77 + ..courseModuleThemeColor = courseModuleThemeColor ??
  78 + this.courseModuleThemeColor
  79 + ..courseModuleCode = courseModuleCode ?? this.courseModuleCode;
  80 + }
47 81 }
48 82  
49 83 CourseCourseLessons $CourseCourseLessonsFromJson(Map<String, dynamic> json) {
50   - final CourseCourseLessons courseCourseLessons = CourseCourseLessons();
51   - final int? courseModuleId = jsonConvert.convert<int>(json['courseModuleId']);
52   - if (courseModuleId != null) {
53   - courseCourseLessons.courseModuleId = courseModuleId;
54   - }
55   - final int? courseType = jsonConvert.convert<int>(json['courseType']);
56   - if (courseType != null) {
57   - courseCourseLessons.courseType = courseType;
58   - }
59   - final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
60   - if (coverUrl != null) {
61   - courseCourseLessons.coverUrl = coverUrl;
62   - }
63   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
64   - if (createTime != null) {
65   - courseCourseLessons.createTime = createTime;
66   - }
67   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
68   - if (deleted != null) {
69   - courseCourseLessons.deleted = deleted;
70   - }
71   - final String? des = jsonConvert.convert<String>(json['des']);
72   - if (des != null) {
73   - courseCourseLessons.des = des;
74   - }
75   - final String? id = jsonConvert.convert<String>(json['id']);
76   - if (id != null) {
77   - courseCourseLessons.id = id;
78   - }
79   - final bool? lock = jsonConvert.convert<bool>(json['lock']);
80   - if (lock != null) {
81   - courseCourseLessons.lock = lock;
82   - }
83   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
84   - if (modifyTime != null) {
85   - courseCourseLessons.modifyTime = modifyTime;
86   - }
87   - final String? name = jsonConvert.convert<String>(json['name']);
88   - if (name != null) {
89   - courseCourseLessons.name = name;
90   - }
91   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
92   - if (sortOrder != null) {
93   - courseCourseLessons.sortOrder = sortOrder;
94   - }
95   - final int? status = jsonConvert.convert<int>(json['status']);
96   - if (status != null) {
97   - courseCourseLessons.status = status;
98   - }
99   - return courseCourseLessons;
  84 + final CourseCourseLessons courseCourseLessons = CourseCourseLessons();
  85 + final int? courseModuleId = jsonConvert.convert<int>(json['courseModuleId']);
  86 + if (courseModuleId != null) {
  87 + courseCourseLessons.courseModuleId = courseModuleId;
  88 + }
  89 + final int? courseType = jsonConvert.convert<int>(json['courseType']);
  90 + if (courseType != null) {
  91 + courseCourseLessons.courseType = courseType;
  92 + }
  93 + final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
  94 + if (coverUrl != null) {
  95 + courseCourseLessons.coverUrl = coverUrl;
  96 + }
  97 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  98 + if (createTime != null) {
  99 + courseCourseLessons.createTime = createTime;
  100 + }
  101 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  102 + if (deleted != null) {
  103 + courseCourseLessons.deleted = deleted;
  104 + }
  105 + final String? des = jsonConvert.convert<String>(json['des']);
  106 + if (des != null) {
  107 + courseCourseLessons.des = des;
  108 + }
  109 + final String? id = jsonConvert.convert<String>(json['id']);
  110 + if (id != null) {
  111 + courseCourseLessons.id = id;
  112 + }
  113 + final bool? lock = jsonConvert.convert<bool>(json['lock']);
  114 + if (lock != null) {
  115 + courseCourseLessons.lock = lock;
  116 + }
  117 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  118 + if (modifyTime != null) {
  119 + courseCourseLessons.modifyTime = modifyTime;
  120 + }
  121 + final String? name = jsonConvert.convert<String>(json['name']);
  122 + if (name != null) {
  123 + courseCourseLessons.name = name;
  124 + }
  125 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  126 + if (sortOrder != null) {
  127 + courseCourseLessons.sortOrder = sortOrder;
  128 + }
  129 + final int? status = jsonConvert.convert<int>(json['status']);
  130 + if (status != null) {
  131 + courseCourseLessons.status = status;
  132 + }
  133 + return courseCourseLessons;
100 134 }
101 135  
102 136 Map<String, dynamic> $CourseCourseLessonsToJson(CourseCourseLessons entity) {
103   - final Map<String, dynamic> data = <String, dynamic>{};
104   - data['courseModuleId'] = entity.courseModuleId;
105   - data['courseType'] = entity.courseType;
106   - data['coverUrl'] = entity.coverUrl;
107   - data['createTime'] = entity.createTime;
108   - data['deleted'] = entity.deleted;
109   - data['des'] = entity.des;
110   - data['id'] = entity.id;
111   - data['lock'] = entity.lock;
112   - data['modifyTime'] = entity.modifyTime;
113   - data['name'] = entity.name;
114   - data['sortOrder'] = entity.sortOrder;
115   - data['status'] = entity.status;
116   - return data;
  137 + final Map<String, dynamic> data = <String, dynamic>{};
  138 + data['courseModuleId'] = entity.courseModuleId;
  139 + data['courseType'] = entity.courseType;
  140 + data['coverUrl'] = entity.coverUrl;
  141 + data['createTime'] = entity.createTime;
  142 + data['deleted'] = entity.deleted;
  143 + data['des'] = entity.des;
  144 + data['id'] = entity.id;
  145 + data['lock'] = entity.lock;
  146 + data['modifyTime'] = entity.modifyTime;
  147 + data['name'] = entity.name;
  148 + data['sortOrder'] = entity.sortOrder;
  149 + data['status'] = entity.status;
  150 + return data;
  151 +}
  152 +
  153 +extension CourseCourseLessonsExtension on CourseCourseLessons {
  154 + CourseCourseLessons copyWith({
  155 + int? courseModuleId,
  156 + int? courseType,
  157 + String? coverUrl,
  158 + String? createTime,
  159 + String? deleted,
  160 + String? des,
  161 + String? id,
  162 + bool? lock,
  163 + String? modifyTime,
  164 + String? name,
  165 + int? sortOrder,
  166 + int? status,
  167 + }) {
  168 + return CourseCourseLessons()
  169 + ..courseModuleId = courseModuleId ?? this.courseModuleId
  170 + ..courseType = courseType ?? this.courseType
  171 + ..coverUrl = coverUrl ?? this.coverUrl
  172 + ..createTime = createTime ?? this.createTime
  173 + ..deleted = deleted ?? this.deleted
  174 + ..des = des ?? this.des
  175 + ..id = id ?? this.id
  176 + ..lock = lock ?? this.lock
  177 + ..modifyTime = modifyTime ?? this.modifyTime
  178 + ..name = name ?? this.name
  179 + ..sortOrder = sortOrder ?? this.sortOrder
  180 + ..status = status ?? this.status;
  181 + }
117 182 }
118 183 \ No newline at end of file
... ...
lib/generated/json/course_module_entity.g.dart
... ... @@ -2,86 +2,126 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/course_module_entity.dart';
3 3  
4 4 CourseModuleEntity $CourseModuleEntityFromJson(Map<String, dynamic> json) {
5   - final CourseModuleEntity courseModuleEntity = CourseModuleEntity();
6   - final String? id = jsonConvert.convert<String>(json['id']);
7   - if (id != null) {
8   - courseModuleEntity.id = id;
9   - }
10   - final String? code = jsonConvert.convert<String>(json['code']);
11   - if (code != null) {
12   - courseModuleEntity.code = code;
13   - }
14   - final int? courseModuleThemeId = jsonConvert.convert<int>(json['courseModuleThemeId']);
15   - if (courseModuleThemeId != null) {
16   - courseModuleEntity.courseModuleThemeId = courseModuleThemeId;
17   - }
18   - final int? courseTotal = jsonConvert.convert<int>(json['courseTotal']);
19   - if (courseTotal != null) {
20   - courseModuleEntity.courseTotal = courseTotal;
21   - }
22   - final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
23   - if (coverUrl != null) {
24   - courseModuleEntity.coverUrl = coverUrl;
25   - }
26   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
27   - if (createTime != null) {
28   - courseModuleEntity.createTime = createTime;
29   - }
30   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
31   - if (deleted != null) {
32   - courseModuleEntity.deleted = deleted;
33   - }
34   - final String? des = jsonConvert.convert<String>(json['des']);
35   - if (des != null) {
36   - courseModuleEntity.des = des;
37   - }
38   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
39   - if (modifyTime != null) {
40   - courseModuleEntity.modifyTime = modifyTime;
41   - }
42   - final String? name = jsonConvert.convert<String>(json['name']);
43   - if (name != null) {
44   - courseModuleEntity.name = name;
45   - }
46   - final int? opening = jsonConvert.convert<int>(json['opening']);
47   - if (opening != null) {
48   - courseModuleEntity.opening = opening;
49   - }
50   - final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
51   - if (picUrl != null) {
52   - courseModuleEntity.picUrl = picUrl;
53   - }
54   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
55   - if (sortOrder != null) {
56   - courseModuleEntity.sortOrder = sortOrder;
57   - }
58   - final int? status = jsonConvert.convert<int>(json['status']);
59   - if (status != null) {
60   - courseModuleEntity.status = status;
61   - }
62   - final String? courseModuleThemeColor = jsonConvert.convert<String>(json['courseModuleThemeColor']);
63   - if (courseModuleThemeColor != null) {
64   - courseModuleEntity.courseModuleThemeColor = courseModuleThemeColor;
65   - }
66   - return courseModuleEntity;
  5 + final CourseModuleEntity courseModuleEntity = CourseModuleEntity();
  6 + final String? id = jsonConvert.convert<String>(json['id']);
  7 + if (id != null) {
  8 + courseModuleEntity.id = id;
  9 + }
  10 + final String? code = jsonConvert.convert<String>(json['code']);
  11 + if (code != null) {
  12 + courseModuleEntity.code = code;
  13 + }
  14 + final int? courseModuleThemeId = jsonConvert.convert<int>(
  15 + json['courseModuleThemeId']);
  16 + if (courseModuleThemeId != null) {
  17 + courseModuleEntity.courseModuleThemeId = courseModuleThemeId;
  18 + }
  19 + final int? courseTotal = jsonConvert.convert<int>(json['courseTotal']);
  20 + if (courseTotal != null) {
  21 + courseModuleEntity.courseTotal = courseTotal;
  22 + }
  23 + final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
  24 + if (coverUrl != null) {
  25 + courseModuleEntity.coverUrl = coverUrl;
  26 + }
  27 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  28 + if (createTime != null) {
  29 + courseModuleEntity.createTime = createTime;
  30 + }
  31 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  32 + if (deleted != null) {
  33 + courseModuleEntity.deleted = deleted;
  34 + }
  35 + final String? des = jsonConvert.convert<String>(json['des']);
  36 + if (des != null) {
  37 + courseModuleEntity.des = des;
  38 + }
  39 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  40 + if (modifyTime != null) {
  41 + courseModuleEntity.modifyTime = modifyTime;
  42 + }
  43 + final String? name = jsonConvert.convert<String>(json['name']);
  44 + if (name != null) {
  45 + courseModuleEntity.name = name;
  46 + }
  47 + final int? opening = jsonConvert.convert<int>(json['opening']);
  48 + if (opening != null) {
  49 + courseModuleEntity.opening = opening;
  50 + }
  51 + final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
  52 + if (picUrl != null) {
  53 + courseModuleEntity.picUrl = picUrl;
  54 + }
  55 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  56 + if (sortOrder != null) {
  57 + courseModuleEntity.sortOrder = sortOrder;
  58 + }
  59 + final int? status = jsonConvert.convert<int>(json['status']);
  60 + if (status != null) {
  61 + courseModuleEntity.status = status;
  62 + }
  63 + final String? courseModuleThemeColor = jsonConvert.convert<String>(
  64 + json['courseModuleThemeColor']);
  65 + if (courseModuleThemeColor != null) {
  66 + courseModuleEntity.courseModuleThemeColor = courseModuleThemeColor;
  67 + }
  68 + return courseModuleEntity;
67 69 }
68 70  
69 71 Map<String, dynamic> $CourseModuleEntityToJson(CourseModuleEntity entity) {
70   - final Map<String, dynamic> data = <String, dynamic>{};
71   - data['id'] = entity.id;
72   - data['code'] = entity.code;
73   - data['courseModuleThemeId'] = entity.courseModuleThemeId;
74   - data['courseTotal'] = entity.courseTotal;
75   - data['coverUrl'] = entity.coverUrl;
76   - data['createTime'] = entity.createTime;
77   - data['deleted'] = entity.deleted;
78   - data['des'] = entity.des;
79   - data['modifyTime'] = entity.modifyTime;
80   - data['name'] = entity.name;
81   - data['opening'] = entity.opening;
82   - data['picUrl'] = entity.picUrl;
83   - data['sortOrder'] = entity.sortOrder;
84   - data['status'] = entity.status;
85   - data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
86   - return data;
  72 + final Map<String, dynamic> data = <String, dynamic>{};
  73 + data['id'] = entity.id;
  74 + data['code'] = entity.code;
  75 + data['courseModuleThemeId'] = entity.courseModuleThemeId;
  76 + data['courseTotal'] = entity.courseTotal;
  77 + data['coverUrl'] = entity.coverUrl;
  78 + data['createTime'] = entity.createTime;
  79 + data['deleted'] = entity.deleted;
  80 + data['des'] = entity.des;
  81 + data['modifyTime'] = entity.modifyTime;
  82 + data['name'] = entity.name;
  83 + data['opening'] = entity.opening;
  84 + data['picUrl'] = entity.picUrl;
  85 + data['sortOrder'] = entity.sortOrder;
  86 + data['status'] = entity.status;
  87 + data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
  88 + return data;
87 89 }
  90 +
  91 +extension CourseModuleEntityExtension on CourseModuleEntity {
  92 + CourseModuleEntity copyWith({
  93 + String? id,
  94 + String? code,
  95 + int? courseModuleThemeId,
  96 + int? courseTotal,
  97 + String? coverUrl,
  98 + String? createTime,
  99 + String? deleted,
  100 + String? des,
  101 + String? modifyTime,
  102 + String? name,
  103 + int? opening,
  104 + String? picUrl,
  105 + int? sortOrder,
  106 + int? status,
  107 + String? courseModuleThemeColor,
  108 + }) {
  109 + return CourseModuleEntity()
  110 + ..id = id ?? this.id
  111 + ..code = code ?? this.code
  112 + ..courseModuleThemeId = courseModuleThemeId ?? this.courseModuleThemeId
  113 + ..courseTotal = courseTotal ?? this.courseTotal
  114 + ..coverUrl = coverUrl ?? this.coverUrl
  115 + ..createTime = createTime ?? this.createTime
  116 + ..deleted = deleted ?? this.deleted
  117 + ..des = des ?? this.des
  118 + ..modifyTime = modifyTime ?? this.modifyTime
  119 + ..name = name ?? this.name
  120 + ..opening = opening ?? this.opening
  121 + ..picUrl = picUrl ?? this.picUrl
  122 + ..sortOrder = sortOrder ?? this.sortOrder
  123 + ..status = status ?? this.status
  124 + ..courseModuleThemeColor = courseModuleThemeColor ??
  125 + this.courseModuleThemeColor;
  126 + }
  127 +}
88 128 \ No newline at end of file
... ...
lib/generated/json/course_process_entity.g.dart
... ... @@ -2,286 +2,435 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/course_process_entity.dart';
3 3  
4 4 CourseProcessEntity $CourseProcessEntityFromJson(Map<String, dynamic> json) {
5   - final CourseProcessEntity courseProcessEntity = CourseProcessEntity();
6   - final int? currentStep = jsonConvert.convert<int>(json['currentStep']);
7   - if (currentStep != null) {
8   - courseProcessEntity.currentStep = currentStep;
9   - }
10   - final int? currentTime = jsonConvert.convert<int>(json['currentTime']);
11   - if (currentTime != null) {
12   - courseProcessEntity.currentTime = currentTime;
13   - }
14   - final List<CourseProcessReadings>? readings = jsonConvert.convertListNotNull<CourseProcessReadings>(json['readings']);
15   - if (readings != null) {
16   - courseProcessEntity.readings = readings;
17   - }
18   - final List<CourseProcessTopics>? topics = jsonConvert.convertListNotNull<CourseProcessTopics>(json['topics']);
19   - if (topics != null) {
20   - courseProcessEntity.topics = topics;
21   - }
22   - final CourseProcessVideos? videos = jsonConvert.convert<CourseProcessVideos>(json['videos']);
23   - if (videos != null) {
24   - courseProcessEntity.videos = videos;
25   - }
26   - return courseProcessEntity;
  5 + final CourseProcessEntity courseProcessEntity = CourseProcessEntity();
  6 + final int? currentStep = jsonConvert.convert<int>(json['currentStep']);
  7 + if (currentStep != null) {
  8 + courseProcessEntity.currentStep = currentStep;
  9 + }
  10 + final int? currentTime = jsonConvert.convert<int>(json['currentTime']);
  11 + if (currentTime != null) {
  12 + courseProcessEntity.currentTime = currentTime;
  13 + }
  14 + final List<CourseProcessReadings>? readings = (json['readings'] as List<
  15 + dynamic>?)
  16 + ?.map(
  17 + (e) =>
  18 + jsonConvert.convert<CourseProcessReadings>(e) as CourseProcessReadings)
  19 + .toList();
  20 + if (readings != null) {
  21 + courseProcessEntity.readings = readings;
  22 + }
  23 + final List<CourseProcessTopics>? topics = (json['topics'] as List<dynamic>?)
  24 + ?.map(
  25 + (e) =>
  26 + jsonConvert.convert<CourseProcessTopics>(e) as CourseProcessTopics)
  27 + .toList();
  28 + if (topics != null) {
  29 + courseProcessEntity.topics = topics;
  30 + }
  31 + final CourseProcessVideos? videos = jsonConvert.convert<CourseProcessVideos>(
  32 + json['videos']);
  33 + if (videos != null) {
  34 + courseProcessEntity.videos = videos;
  35 + }
  36 + return courseProcessEntity;
27 37 }
28 38  
29 39 Map<String, dynamic> $CourseProcessEntityToJson(CourseProcessEntity entity) {
30   - final Map<String, dynamic> data = <String, dynamic>{};
31   - data['currentStep'] = entity.currentStep;
32   - data['currentTime'] = entity.currentTime;
33   - data['readings'] = entity.readings?.map((v) => v.toJson()).toList();
34   - data['topics'] = entity.topics?.map((v) => v.toJson()).toList();
35   - data['videos'] = entity.videos?.toJson();
36   - return data;
  40 + final Map<String, dynamic> data = <String, dynamic>{};
  41 + data['currentStep'] = entity.currentStep;
  42 + data['currentTime'] = entity.currentTime;
  43 + data['readings'] = entity.readings?.map((v) => v.toJson()).toList();
  44 + data['topics'] = entity.topics?.map((v) => v.toJson()).toList();
  45 + data['videos'] = entity.videos?.toJson();
  46 + return data;
37 47 }
38 48  
39   -CourseProcessReadings $CourseProcessReadingsFromJson(Map<String, dynamic> json) {
40   - final CourseProcessReadings courseProcessReadings = CourseProcessReadings();
41   - final String? audioUrl = jsonConvert.convert<String>(json['audioUrl']);
42   - if (audioUrl != null) {
43   - courseProcessReadings.audioUrl = audioUrl;
44   - }
45   - final int? courseLessonId = jsonConvert.convert<int>(json['courseLessonId']);
46   - if (courseLessonId != null) {
47   - courseProcessReadings.courseLessonId = courseLessonId;
48   - }
49   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
50   - if (createTime != null) {
51   - courseProcessReadings.createTime = createTime;
52   - }
53   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
54   - if (deleted != null) {
55   - courseProcessReadings.deleted = deleted;
56   - }
57   - final String? id = jsonConvert.convert<String>(json['id']);
58   - if (id != null) {
59   - courseProcessReadings.id = id;
60   - }
61   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
62   - if (modifyTime != null) {
63   - courseProcessReadings.modifyTime = modifyTime;
64   - }
65   - final String? padPicUrl = jsonConvert.convert<String>(json['padPicUrl']);
66   - if (padPicUrl != null) {
67   - courseProcessReadings.padPicUrl = padPicUrl;
68   - }
69   - final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
70   - if (picUrl != null) {
71   - courseProcessReadings.picUrl = picUrl;
72   - }
73   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
74   - if (sortOrder != null) {
75   - courseProcessReadings.sortOrder = sortOrder;
76   - }
77   - final String? word = jsonConvert.convert<String>(json['word']);
78   - if (word != null) {
79   - courseProcessReadings.word = word;
80   - }
81   - final String? recordUrl = jsonConvert.convert<String>(json['recordUrl']);
82   - if (recordUrl != null) {
83   - courseProcessReadings.recordUrl = recordUrl;
84   - }
85   - final String? recordScore = jsonConvert.convert<String>(json['recordScore']);
86   - if (recordScore != null) {
87   - courseProcessReadings.recordScore = recordScore;
88   - }
89   - return courseProcessReadings;
  49 +extension CourseProcessEntityExtension on CourseProcessEntity {
  50 + CourseProcessEntity copyWith({
  51 + int? currentStep,
  52 + int? currentTime,
  53 + List<CourseProcessReadings>? readings,
  54 + List<CourseProcessTopics>? topics,
  55 + CourseProcessVideos? videos,
  56 + }) {
  57 + return CourseProcessEntity()
  58 + ..currentStep = currentStep ?? this.currentStep
  59 + ..currentTime = currentTime ?? this.currentTime
  60 + ..readings = readings ?? this.readings
  61 + ..topics = topics ?? this.topics
  62 + ..videos = videos ?? this.videos;
  63 + }
90 64 }
91 65  
92   -Map<String, dynamic> $CourseProcessReadingsToJson(CourseProcessReadings entity) {
93   - final Map<String, dynamic> data = <String, dynamic>{};
94   - data['audioUrl'] = entity.audioUrl;
95   - data['courseLessonId'] = entity.courseLessonId;
96   - data['createTime'] = entity.createTime;
97   - data['deleted'] = entity.deleted;
98   - data['id'] = entity.id;
99   - data['modifyTime'] = entity.modifyTime;
100   - data['padPicUrl'] = entity.padPicUrl;
101   - data['picUrl'] = entity.picUrl;
102   - data['sortOrder'] = entity.sortOrder;
103   - data['word'] = entity.word;
104   - data['recordUrl'] = entity.recordUrl;
105   - data['recordScore'] = entity.recordScore;
106   - return data;
  66 +CourseProcessReadings $CourseProcessReadingsFromJson(
  67 + Map<String, dynamic> json) {
  68 + final CourseProcessReadings courseProcessReadings = CourseProcessReadings();
  69 + final String? audioUrl = jsonConvert.convert<String>(json['audioUrl']);
  70 + if (audioUrl != null) {
  71 + courseProcessReadings.audioUrl = audioUrl;
  72 + }
  73 + final int? courseLessonId = jsonConvert.convert<int>(json['courseLessonId']);
  74 + if (courseLessonId != null) {
  75 + courseProcessReadings.courseLessonId = courseLessonId;
  76 + }
  77 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  78 + if (createTime != null) {
  79 + courseProcessReadings.createTime = createTime;
  80 + }
  81 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  82 + if (deleted != null) {
  83 + courseProcessReadings.deleted = deleted;
  84 + }
  85 + final String? id = jsonConvert.convert<String>(json['id']);
  86 + if (id != null) {
  87 + courseProcessReadings.id = id;
  88 + }
  89 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  90 + if (modifyTime != null) {
  91 + courseProcessReadings.modifyTime = modifyTime;
  92 + }
  93 + final String? padPicUrl = jsonConvert.convert<String>(json['padPicUrl']);
  94 + if (padPicUrl != null) {
  95 + courseProcessReadings.padPicUrl = padPicUrl;
  96 + }
  97 + final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
  98 + if (picUrl != null) {
  99 + courseProcessReadings.picUrl = picUrl;
  100 + }
  101 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  102 + if (sortOrder != null) {
  103 + courseProcessReadings.sortOrder = sortOrder;
  104 + }
  105 + final String? word = jsonConvert.convert<String>(json['word']);
  106 + if (word != null) {
  107 + courseProcessReadings.word = word;
  108 + }
  109 + final String? recordUrl = jsonConvert.convert<String>(json['recordUrl']);
  110 + if (recordUrl != null) {
  111 + courseProcessReadings.recordUrl = recordUrl;
  112 + }
  113 + final String? recordScore = jsonConvert.convert<String>(json['recordScore']);
  114 + if (recordScore != null) {
  115 + courseProcessReadings.recordScore = recordScore;
  116 + }
  117 + return courseProcessReadings;
  118 +}
  119 +
  120 +Map<String, dynamic> $CourseProcessReadingsToJson(
  121 + CourseProcessReadings entity) {
  122 + final Map<String, dynamic> data = <String, dynamic>{};
  123 + data['audioUrl'] = entity.audioUrl;
  124 + data['courseLessonId'] = entity.courseLessonId;
  125 + data['createTime'] = entity.createTime;
  126 + data['deleted'] = entity.deleted;
  127 + data['id'] = entity.id;
  128 + data['modifyTime'] = entity.modifyTime;
  129 + data['padPicUrl'] = entity.padPicUrl;
  130 + data['picUrl'] = entity.picUrl;
  131 + data['sortOrder'] = entity.sortOrder;
  132 + data['word'] = entity.word;
  133 + data['recordUrl'] = entity.recordUrl;
  134 + data['recordScore'] = entity.recordScore;
  135 + return data;
  136 +}
  137 +
  138 +extension CourseProcessReadingsExtension on CourseProcessReadings {
  139 + CourseProcessReadings copyWith({
  140 + String? audioUrl,
  141 + int? courseLessonId,
  142 + String? createTime,
  143 + String? deleted,
  144 + String? id,
  145 + String? modifyTime,
  146 + String? padPicUrl,
  147 + String? picUrl,
  148 + int? sortOrder,
  149 + String? word,
  150 + String? recordUrl,
  151 + String? recordScore,
  152 + }) {
  153 + return CourseProcessReadings()
  154 + ..audioUrl = audioUrl ?? this.audioUrl
  155 + ..courseLessonId = courseLessonId ?? this.courseLessonId
  156 + ..createTime = createTime ?? this.createTime
  157 + ..deleted = deleted ?? this.deleted
  158 + ..id = id ?? this.id
  159 + ..modifyTime = modifyTime ?? this.modifyTime
  160 + ..padPicUrl = padPicUrl ?? this.padPicUrl
  161 + ..picUrl = picUrl ?? this.picUrl
  162 + ..sortOrder = sortOrder ?? this.sortOrder
  163 + ..word = word ?? this.word
  164 + ..recordUrl = recordUrl ?? this.recordUrl
  165 + ..recordScore = recordScore ?? this.recordScore;
  166 + }
107 167 }
108 168  
109 169 CourseProcessTopics $CourseProcessTopicsFromJson(Map<String, dynamic> json) {
110   - final CourseProcessTopics courseProcessTopics = CourseProcessTopics();
111   - final String? audioUrl = jsonConvert.convert<String>(json['audioUrl']);
112   - if (audioUrl != null) {
113   - courseProcessTopics.audioUrl = audioUrl;
114   - }
115   - final int? courseLessonId = jsonConvert.convert<int>(json['courseLessonId']);
116   - if (courseLessonId != null) {
117   - courseProcessTopics.courseLessonId = courseLessonId;
118   - }
119   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
120   - if (createTime != null) {
121   - courseProcessTopics.createTime = createTime;
122   - }
123   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
124   - if (deleted != null) {
125   - courseProcessTopics.deleted = deleted;
126   - }
127   - final String? id = jsonConvert.convert<String>(json['id']);
128   - if (id != null) {
129   - courseProcessTopics.id = id;
130   - }
131   - final String? keyWord = jsonConvert.convert<String>(json['keyWord']);
132   - if (keyWord != null) {
133   - courseProcessTopics.keyWord = keyWord;
134   - }
135   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
136   - if (modifyTime != null) {
137   - courseProcessTopics.modifyTime = modifyTime;
138   - }
139   - final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
140   - if (picUrl != null) {
141   - courseProcessTopics.picUrl = picUrl;
142   - }
143   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
144   - if (sortOrder != null) {
145   - courseProcessTopics.sortOrder = sortOrder;
146   - }
147   - final int? status = jsonConvert.convert<int>(json['status']);
148   - if (status != null) {
149   - courseProcessTopics.status = status;
150   - }
151   - final List<CourseProcessTopicsTopicAnswerList>? topicAnswerList = jsonConvert.convertListNotNull<CourseProcessTopicsTopicAnswerList>(json['topicAnswerList']);
152   - if (topicAnswerList != null) {
153   - courseProcessTopics.topicAnswerList = topicAnswerList;
154   - }
155   - final int? type = jsonConvert.convert<int>(json['type']);
156   - if (type != null) {
157   - courseProcessTopics.type = type;
158   - }
159   - final String? word = jsonConvert.convert<String>(json['word']);
160   - if (word != null) {
161   - courseProcessTopics.word = word;
162   - }
163   - return courseProcessTopics;
  170 + final CourseProcessTopics courseProcessTopics = CourseProcessTopics();
  171 + final String? audioUrl = jsonConvert.convert<String>(json['audioUrl']);
  172 + if (audioUrl != null) {
  173 + courseProcessTopics.audioUrl = audioUrl;
  174 + }
  175 + final int? courseLessonId = jsonConvert.convert<int>(json['courseLessonId']);
  176 + if (courseLessonId != null) {
  177 + courseProcessTopics.courseLessonId = courseLessonId;
  178 + }
  179 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  180 + if (createTime != null) {
  181 + courseProcessTopics.createTime = createTime;
  182 + }
  183 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  184 + if (deleted != null) {
  185 + courseProcessTopics.deleted = deleted;
  186 + }
  187 + final String? id = jsonConvert.convert<String>(json['id']);
  188 + if (id != null) {
  189 + courseProcessTopics.id = id;
  190 + }
  191 + final String? keyWord = jsonConvert.convert<String>(json['keyWord']);
  192 + if (keyWord != null) {
  193 + courseProcessTopics.keyWord = keyWord;
  194 + }
  195 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  196 + if (modifyTime != null) {
  197 + courseProcessTopics.modifyTime = modifyTime;
  198 + }
  199 + final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
  200 + if (picUrl != null) {
  201 + courseProcessTopics.picUrl = picUrl;
  202 + }
  203 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  204 + if (sortOrder != null) {
  205 + courseProcessTopics.sortOrder = sortOrder;
  206 + }
  207 + final int? status = jsonConvert.convert<int>(json['status']);
  208 + if (status != null) {
  209 + courseProcessTopics.status = status;
  210 + }
  211 + final List<
  212 + CourseProcessTopicsTopicAnswerList>? topicAnswerList = (json['topicAnswerList'] as List<
  213 + dynamic>?)?.map(
  214 + (e) =>
  215 + jsonConvert.convert<CourseProcessTopicsTopicAnswerList>(
  216 + e) as CourseProcessTopicsTopicAnswerList).toList();
  217 + if (topicAnswerList != null) {
  218 + courseProcessTopics.topicAnswerList = topicAnswerList;
  219 + }
  220 + final int? type = jsonConvert.convert<int>(json['type']);
  221 + if (type != null) {
  222 + courseProcessTopics.type = type;
  223 + }
  224 + final String? word = jsonConvert.convert<String>(json['word']);
  225 + if (word != null) {
  226 + courseProcessTopics.word = word;
  227 + }
  228 + return courseProcessTopics;
164 229 }
165 230  
166 231 Map<String, dynamic> $CourseProcessTopicsToJson(CourseProcessTopics entity) {
167   - final Map<String, dynamic> data = <String, dynamic>{};
168   - data['audioUrl'] = entity.audioUrl;
169   - data['courseLessonId'] = entity.courseLessonId;
170   - data['createTime'] = entity.createTime;
171   - data['deleted'] = entity.deleted;
172   - data['id'] = entity.id;
173   - data['keyWord'] = entity.keyWord;
174   - data['modifyTime'] = entity.modifyTime;
175   - data['picUrl'] = entity.picUrl;
176   - data['sortOrder'] = entity.sortOrder;
177   - data['status'] = entity.status;
178   - data['topicAnswerList'] = entity.topicAnswerList?.map((v) => v.toJson()).toList();
179   - data['type'] = entity.type;
180   - data['word'] = entity.word;
181   - return data;
  232 + final Map<String, dynamic> data = <String, dynamic>{};
  233 + data['audioUrl'] = entity.audioUrl;
  234 + data['courseLessonId'] = entity.courseLessonId;
  235 + data['createTime'] = entity.createTime;
  236 + data['deleted'] = entity.deleted;
  237 + data['id'] = entity.id;
  238 + data['keyWord'] = entity.keyWord;
  239 + data['modifyTime'] = entity.modifyTime;
  240 + data['picUrl'] = entity.picUrl;
  241 + data['sortOrder'] = entity.sortOrder;
  242 + data['status'] = entity.status;
  243 + data['topicAnswerList'] =
  244 + entity.topicAnswerList?.map((v) => v.toJson()).toList();
  245 + data['type'] = entity.type;
  246 + data['word'] = entity.word;
  247 + return data;
  248 +}
  249 +
  250 +extension CourseProcessTopicsExtension on CourseProcessTopics {
  251 + CourseProcessTopics copyWith({
  252 + String? audioUrl,
  253 + int? courseLessonId,
  254 + String? createTime,
  255 + String? deleted,
  256 + String? id,
  257 + String? keyWord,
  258 + String? modifyTime,
  259 + String? picUrl,
  260 + int? sortOrder,
  261 + int? status,
  262 + List<CourseProcessTopicsTopicAnswerList>? topicAnswerList,
  263 + int? type,
  264 + String? word,
  265 + }) {
  266 + return CourseProcessTopics()
  267 + ..audioUrl = audioUrl ?? this.audioUrl
  268 + ..courseLessonId = courseLessonId ?? this.courseLessonId
  269 + ..createTime = createTime ?? this.createTime
  270 + ..deleted = deleted ?? this.deleted
  271 + ..id = id ?? this.id
  272 + ..keyWord = keyWord ?? this.keyWord
  273 + ..modifyTime = modifyTime ?? this.modifyTime
  274 + ..picUrl = picUrl ?? this.picUrl
  275 + ..sortOrder = sortOrder ?? this.sortOrder
  276 + ..status = status ?? this.status
  277 + ..topicAnswerList = topicAnswerList ?? this.topicAnswerList
  278 + ..type = type ?? this.type
  279 + ..word = word ?? this.word;
  280 + }
  281 +}
  282 +
  283 +CourseProcessTopicsTopicAnswerList $CourseProcessTopicsTopicAnswerListFromJson(
  284 + Map<String, dynamic> json) {
  285 + final CourseProcessTopicsTopicAnswerList courseProcessTopicsTopicAnswerList = CourseProcessTopicsTopicAnswerList();
  286 + final int? correct = jsonConvert.convert<int>(json['correct']);
  287 + if (correct != null) {
  288 + courseProcessTopicsTopicAnswerList.correct = correct;
  289 + }
  290 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  291 + if (createTime != null) {
  292 + courseProcessTopicsTopicAnswerList.createTime = createTime;
  293 + }
  294 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  295 + if (deleted != null) {
  296 + courseProcessTopicsTopicAnswerList.deleted = deleted;
  297 + }
  298 + final String? id = jsonConvert.convert<String>(json['id']);
  299 + if (id != null) {
  300 + courseProcessTopicsTopicAnswerList.id = id;
  301 + }
  302 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  303 + if (modifyTime != null) {
  304 + courseProcessTopicsTopicAnswerList.modifyTime = modifyTime;
  305 + }
  306 + final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
  307 + if (picUrl != null) {
  308 + courseProcessTopicsTopicAnswerList.picUrl = picUrl;
  309 + }
  310 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  311 + if (sortOrder != null) {
  312 + courseProcessTopicsTopicAnswerList.sortOrder = sortOrder;
  313 + }
  314 + final int? topicId = jsonConvert.convert<int>(json['topicId']);
  315 + if (topicId != null) {
  316 + courseProcessTopicsTopicAnswerList.topicId = topicId;
  317 + }
  318 + final String? word = jsonConvert.convert<String>(json['word']);
  319 + if (word != null) {
  320 + courseProcessTopicsTopicAnswerList.word = word;
  321 + }
  322 + return courseProcessTopicsTopicAnswerList;
182 323 }
183 324  
184   -CourseProcessTopicsTopicAnswerList $CourseProcessTopicsTopicAnswerListFromJson(Map<String, dynamic> json) {
185   - final CourseProcessTopicsTopicAnswerList courseProcessTopicsTopicAnswerList = CourseProcessTopicsTopicAnswerList();
186   - final int? correct = jsonConvert.convert<int>(json['correct']);
187   - if (correct != null) {
188   - courseProcessTopicsTopicAnswerList.correct = correct;
189   - }
190   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
191   - if (createTime != null) {
192   - courseProcessTopicsTopicAnswerList.createTime = createTime;
193   - }
194   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
195   - if (deleted != null) {
196   - courseProcessTopicsTopicAnswerList.deleted = deleted;
197   - }
198   - final String? id = jsonConvert.convert<String>(json['id']);
199   - if (id != null) {
200   - courseProcessTopicsTopicAnswerList.id = id;
201   - }
202   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
203   - if (modifyTime != null) {
204   - courseProcessTopicsTopicAnswerList.modifyTime = modifyTime;
205   - }
206   - final String? picUrl = jsonConvert.convert<String>(json['picUrl']);
207   - if (picUrl != null) {
208   - courseProcessTopicsTopicAnswerList.picUrl = picUrl;
209   - }
210   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
211   - if (sortOrder != null) {
212   - courseProcessTopicsTopicAnswerList.sortOrder = sortOrder;
213   - }
214   - final int? topicId = jsonConvert.convert<int>(json['topicId']);
215   - if (topicId != null) {
216   - courseProcessTopicsTopicAnswerList.topicId = topicId;
217   - }
218   - final String? word = jsonConvert.convert<String>(json['word']);
219   - if (word != null) {
220   - courseProcessTopicsTopicAnswerList.word = word;
221   - }
222   - return courseProcessTopicsTopicAnswerList;
  325 +Map<String, dynamic> $CourseProcessTopicsTopicAnswerListToJson(
  326 + CourseProcessTopicsTopicAnswerList entity) {
  327 + final Map<String, dynamic> data = <String, dynamic>{};
  328 + data['correct'] = entity.correct;
  329 + data['createTime'] = entity.createTime;
  330 + data['deleted'] = entity.deleted;
  331 + data['id'] = entity.id;
  332 + data['modifyTime'] = entity.modifyTime;
  333 + data['picUrl'] = entity.picUrl;
  334 + data['sortOrder'] = entity.sortOrder;
  335 + data['topicId'] = entity.topicId;
  336 + data['word'] = entity.word;
  337 + return data;
223 338 }
224 339  
225   -Map<String, dynamic> $CourseProcessTopicsTopicAnswerListToJson(CourseProcessTopicsTopicAnswerList entity) {
226   - final Map<String, dynamic> data = <String, dynamic>{};
227   - data['correct'] = entity.correct;
228   - data['createTime'] = entity.createTime;
229   - data['deleted'] = entity.deleted;
230   - data['id'] = entity.id;
231   - data['modifyTime'] = entity.modifyTime;
232   - data['picUrl'] = entity.picUrl;
233   - data['sortOrder'] = entity.sortOrder;
234   - data['topicId'] = entity.topicId;
235   - data['word'] = entity.word;
236   - return data;
  340 +extension CourseProcessTopicsTopicAnswerListExtension on CourseProcessTopicsTopicAnswerList {
  341 + CourseProcessTopicsTopicAnswerList copyWith({
  342 + int? correct,
  343 + String? createTime,
  344 + String? deleted,
  345 + String? id,
  346 + String? modifyTime,
  347 + String? picUrl,
  348 + int? sortOrder,
  349 + int? topicId,
  350 + String? word,
  351 + }) {
  352 + return CourseProcessTopicsTopicAnswerList()
  353 + ..correct = correct ?? this.correct
  354 + ..createTime = createTime ?? this.createTime
  355 + ..deleted = deleted ?? this.deleted
  356 + ..id = id ?? this.id
  357 + ..modifyTime = modifyTime ?? this.modifyTime
  358 + ..picUrl = picUrl ?? this.picUrl
  359 + ..sortOrder = sortOrder ?? this.sortOrder
  360 + ..topicId = topicId ?? this.topicId
  361 + ..word = word ?? this.word;
  362 + }
237 363 }
238 364  
239 365 CourseProcessVideos $CourseProcessVideosFromJson(Map<String, dynamic> json) {
240   - final CourseProcessVideos courseProcessVideos = CourseProcessVideos();
241   - final int? courseLessonId = jsonConvert.convert<int>(json['courseLessonId']);
242   - if (courseLessonId != null) {
243   - courseProcessVideos.courseLessonId = courseLessonId;
244   - }
245   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
246   - if (createTime != null) {
247   - courseProcessVideos.createTime = createTime;
248   - }
249   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
250   - if (deleted != null) {
251   - courseProcessVideos.deleted = deleted;
252   - }
253   - final String? id = jsonConvert.convert<String>(json['id']);
254   - if (id != null) {
255   - courseProcessVideos.id = id;
256   - }
257   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
258   - if (modifyTime != null) {
259   - courseProcessVideos.modifyTime = modifyTime;
260   - }
261   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
262   - if (sortOrder != null) {
263   - courseProcessVideos.sortOrder = sortOrder;
264   - }
265   - final String? subtitleUrl = jsonConvert.convert<String>(json['subtitleUrl']);
266   - if (subtitleUrl != null) {
267   - courseProcessVideos.subtitleUrl = subtitleUrl;
268   - }
269   - final String? videoUrl = jsonConvert.convert<String>(json['videoUrl']);
270   - if (videoUrl != null) {
271   - courseProcessVideos.videoUrl = videoUrl;
272   - }
273   - return courseProcessVideos;
  366 + final CourseProcessVideos courseProcessVideos = CourseProcessVideos();
  367 + final int? courseLessonId = jsonConvert.convert<int>(json['courseLessonId']);
  368 + if (courseLessonId != null) {
  369 + courseProcessVideos.courseLessonId = courseLessonId;
  370 + }
  371 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  372 + if (createTime != null) {
  373 + courseProcessVideos.createTime = createTime;
  374 + }
  375 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  376 + if (deleted != null) {
  377 + courseProcessVideos.deleted = deleted;
  378 + }
  379 + final String? id = jsonConvert.convert<String>(json['id']);
  380 + if (id != null) {
  381 + courseProcessVideos.id = id;
  382 + }
  383 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  384 + if (modifyTime != null) {
  385 + courseProcessVideos.modifyTime = modifyTime;
  386 + }
  387 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  388 + if (sortOrder != null) {
  389 + courseProcessVideos.sortOrder = sortOrder;
  390 + }
  391 + final String? subtitleUrl = jsonConvert.convert<String>(json['subtitleUrl']);
  392 + if (subtitleUrl != null) {
  393 + courseProcessVideos.subtitleUrl = subtitleUrl;
  394 + }
  395 + final String? videoUrl = jsonConvert.convert<String>(json['videoUrl']);
  396 + if (videoUrl != null) {
  397 + courseProcessVideos.videoUrl = videoUrl;
  398 + }
  399 + return courseProcessVideos;
274 400 }
275 401  
276 402 Map<String, dynamic> $CourseProcessVideosToJson(CourseProcessVideos entity) {
277   - final Map<String, dynamic> data = <String, dynamic>{};
278   - data['courseLessonId'] = entity.courseLessonId;
279   - data['createTime'] = entity.createTime;
280   - data['deleted'] = entity.deleted;
281   - data['id'] = entity.id;
282   - data['modifyTime'] = entity.modifyTime;
283   - data['sortOrder'] = entity.sortOrder;
284   - data['subtitleUrl'] = entity.subtitleUrl;
285   - data['videoUrl'] = entity.videoUrl;
286   - return data;
  403 + final Map<String, dynamic> data = <String, dynamic>{};
  404 + data['courseLessonId'] = entity.courseLessonId;
  405 + data['createTime'] = entity.createTime;
  406 + data['deleted'] = entity.deleted;
  407 + data['id'] = entity.id;
  408 + data['modifyTime'] = entity.modifyTime;
  409 + data['sortOrder'] = entity.sortOrder;
  410 + data['subtitleUrl'] = entity.subtitleUrl;
  411 + data['videoUrl'] = entity.videoUrl;
  412 + return data;
  413 +}
  414 +
  415 +extension CourseProcessVideosExtension on CourseProcessVideos {
  416 + CourseProcessVideos copyWith({
  417 + int? courseLessonId,
  418 + String? createTime,
  419 + String? deleted,
  420 + String? id,
  421 + String? modifyTime,
  422 + int? sortOrder,
  423 + String? subtitleUrl,
  424 + String? videoUrl,
  425 + }) {
  426 + return CourseProcessVideos()
  427 + ..courseLessonId = courseLessonId ?? this.courseLessonId
  428 + ..createTime = createTime ?? this.createTime
  429 + ..deleted = deleted ?? this.deleted
  430 + ..id = id ?? this.id
  431 + ..modifyTime = modifyTime ?? this.modifyTime
  432 + ..sortOrder = sortOrder ?? this.sortOrder
  433 + ..subtitleUrl = subtitleUrl ?? this.subtitleUrl
  434 + ..videoUrl = videoUrl ?? this.videoUrl;
  435 + }
287 436 }
288 437 \ No newline at end of file
... ...
lib/generated/json/follow_read_entity.g.dart
... ... @@ -2,66 +2,95 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/follow_read_entity.dart';
3 3  
4 4 FollowReadEntity $FollowReadEntityFromJson(Map<String, dynamic> json) {
5   - final FollowReadEntity followReadEntity = FollowReadEntity();
6   - final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
7   - if (coverUrl != null) {
8   - followReadEntity.coverUrl = coverUrl;
9   - }
10   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
11   - if (createTime != null) {
12   - followReadEntity.createTime = createTime;
13   - }
14   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
15   - if (deleted != null) {
16   - followReadEntity.deleted = deleted;
17   - }
18   - final String? id = jsonConvert.convert<String>(json['id']);
19   - if (id != null) {
20   - followReadEntity.id = id;
21   - }
22   - final bool? lock = jsonConvert.convert<bool>(json['lock']);
23   - if (lock != null) {
24   - followReadEntity.lock = lock;
25   - }
26   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
27   - if (modifyTime != null) {
28   - followReadEntity.modifyTime = modifyTime;
29   - }
30   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
31   - if (sortOrder != null) {
32   - followReadEntity.sortOrder = sortOrder;
33   - }
34   - final int? star = jsonConvert.convert<int>(json['star']);
35   - if (star != null) {
36   - followReadEntity.star = star;
37   - }
38   - final int? status = jsonConvert.convert<int>(json['status']);
39   - if (status != null) {
40   - followReadEntity.status = status;
41   - }
42   - final String? title = jsonConvert.convert<String>(json['title']);
43   - if (title != null) {
44   - followReadEntity.title = title;
45   - }
46   - final int? videoTotal = jsonConvert.convert<int>(json['videoTotal']);
47   - if (videoTotal != null) {
48   - followReadEntity.videoTotal = videoTotal;
49   - }
50   - return followReadEntity;
  5 + final FollowReadEntity followReadEntity = FollowReadEntity();
  6 + final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
  7 + if (coverUrl != null) {
  8 + followReadEntity.coverUrl = coverUrl;
  9 + }
  10 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  11 + if (createTime != null) {
  12 + followReadEntity.createTime = createTime;
  13 + }
  14 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  15 + if (deleted != null) {
  16 + followReadEntity.deleted = deleted;
  17 + }
  18 + final String? id = jsonConvert.convert<String>(json['id']);
  19 + if (id != null) {
  20 + followReadEntity.id = id;
  21 + }
  22 + final bool? lock = jsonConvert.convert<bool>(json['lock']);
  23 + if (lock != null) {
  24 + followReadEntity.lock = lock;
  25 + }
  26 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  27 + if (modifyTime != null) {
  28 + followReadEntity.modifyTime = modifyTime;
  29 + }
  30 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  31 + if (sortOrder != null) {
  32 + followReadEntity.sortOrder = sortOrder;
  33 + }
  34 + final int? star = jsonConvert.convert<int>(json['star']);
  35 + if (star != null) {
  36 + followReadEntity.star = star;
  37 + }
  38 + final int? status = jsonConvert.convert<int>(json['status']);
  39 + if (status != null) {
  40 + followReadEntity.status = status;
  41 + }
  42 + final String? title = jsonConvert.convert<String>(json['title']);
  43 + if (title != null) {
  44 + followReadEntity.title = title;
  45 + }
  46 + final int? videoTotal = jsonConvert.convert<int>(json['videoTotal']);
  47 + if (videoTotal != null) {
  48 + followReadEntity.videoTotal = videoTotal;
  49 + }
  50 + return followReadEntity;
51 51 }
52 52  
53 53 Map<String, dynamic> $FollowReadEntityToJson(FollowReadEntity entity) {
54   - final Map<String, dynamic> data = <String, dynamic>{};
55   - data['coverUrl'] = entity.coverUrl;
56   - data['createTime'] = entity.createTime;
57   - data['deleted'] = entity.deleted;
58   - data['id'] = entity.id;
59   - data['lock'] = entity.lock;
60   - data['modifyTime'] = entity.modifyTime;
61   - data['sortOrder'] = entity.sortOrder;
62   - data['star'] = entity.star;
63   - data['status'] = entity.status;
64   - data['title'] = entity.title;
65   - data['videoTotal'] = entity.videoTotal;
66   - return data;
  54 + final Map<String, dynamic> data = <String, dynamic>{};
  55 + data['coverUrl'] = entity.coverUrl;
  56 + data['createTime'] = entity.createTime;
  57 + data['deleted'] = entity.deleted;
  58 + data['id'] = entity.id;
  59 + data['lock'] = entity.lock;
  60 + data['modifyTime'] = entity.modifyTime;
  61 + data['sortOrder'] = entity.sortOrder;
  62 + data['star'] = entity.star;
  63 + data['status'] = entity.status;
  64 + data['title'] = entity.title;
  65 + data['videoTotal'] = entity.videoTotal;
  66 + return data;
  67 +}
  68 +
  69 +extension FollowReadEntityExtension on FollowReadEntity {
  70 + FollowReadEntity copyWith({
  71 + String? coverUrl,
  72 + String? createTime,
  73 + String? deleted,
  74 + String? id,
  75 + bool? lock,
  76 + String? modifyTime,
  77 + int? sortOrder,
  78 + int? star,
  79 + int? status,
  80 + String? title,
  81 + int? videoTotal,
  82 + }) {
  83 + return FollowReadEntity()
  84 + ..coverUrl = coverUrl ?? this.coverUrl
  85 + ..createTime = createTime ?? this.createTime
  86 + ..deleted = deleted ?? this.deleted
  87 + ..id = id ?? this.id
  88 + ..lock = lock ?? this.lock
  89 + ..modifyTime = modifyTime ?? this.modifyTime
  90 + ..sortOrder = sortOrder ?? this.sortOrder
  91 + ..star = star ?? this.star
  92 + ..status = status ?? this.status
  93 + ..title = title ?? this.title
  94 + ..videoTotal = videoTotal ?? this.videoTotal;
  95 + }
67 96 }
68 97 \ No newline at end of file
... ...
lib/generated/json/listen_entity.g.dart
... ... @@ -2,66 +2,95 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/listen_entity.dart';
3 3  
4 4 ListenEntity $ListenEntityFromJson(Map<String, dynamic> json) {
5   - final ListenEntity listenEntity = ListenEntity();
6   - final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
7   - if (coverUrl != null) {
8   - listenEntity.coverUrl = coverUrl;
9   - }
10   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
11   - if (createTime != null) {
12   - listenEntity.createTime = createTime;
13   - }
14   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
15   - if (deleted != null) {
16   - listenEntity.deleted = deleted;
17   - }
18   - final String? id = jsonConvert.convert<String>(json['id']);
19   - if (id != null) {
20   - listenEntity.id = id;
21   - }
22   - final bool? lock = jsonConvert.convert<bool>(json['lock']);
23   - if (lock != null) {
24   - listenEntity.lock = lock;
25   - }
26   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
27   - if (modifyTime != null) {
28   - listenEntity.modifyTime = modifyTime;
29   - }
30   - final double? sortOrder = jsonConvert.convert<double>(json['sortOrder']);
31   - if (sortOrder != null) {
32   - listenEntity.sortOrder = sortOrder;
33   - }
34   - final double? status = jsonConvert.convert<double>(json['status']);
35   - if (status != null) {
36   - listenEntity.status = status;
37   - }
38   - final String? subtitleUrl = jsonConvert.convert<String>(json['subtitleUrl']);
39   - if (subtitleUrl != null) {
40   - listenEntity.subtitleUrl = subtitleUrl;
41   - }
42   - final String? title = jsonConvert.convert<String>(json['title']);
43   - if (title != null) {
44   - listenEntity.title = title;
45   - }
46   - final String? videoUrl = jsonConvert.convert<String>(json['videoUrl']);
47   - if (videoUrl != null) {
48   - listenEntity.videoUrl = videoUrl;
49   - }
50   - return listenEntity;
  5 + final ListenEntity listenEntity = ListenEntity();
  6 + final String? coverUrl = jsonConvert.convert<String>(json['coverUrl']);
  7 + if (coverUrl != null) {
  8 + listenEntity.coverUrl = coverUrl;
  9 + }
  10 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  11 + if (createTime != null) {
  12 + listenEntity.createTime = createTime;
  13 + }
  14 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  15 + if (deleted != null) {
  16 + listenEntity.deleted = deleted;
  17 + }
  18 + final String? id = jsonConvert.convert<String>(json['id']);
  19 + if (id != null) {
  20 + listenEntity.id = id;
  21 + }
  22 + final bool? lock = jsonConvert.convert<bool>(json['lock']);
  23 + if (lock != null) {
  24 + listenEntity.lock = lock;
  25 + }
  26 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  27 + if (modifyTime != null) {
  28 + listenEntity.modifyTime = modifyTime;
  29 + }
  30 + final double? sortOrder = jsonConvert.convert<double>(json['sortOrder']);
  31 + if (sortOrder != null) {
  32 + listenEntity.sortOrder = sortOrder;
  33 + }
  34 + final double? status = jsonConvert.convert<double>(json['status']);
  35 + if (status != null) {
  36 + listenEntity.status = status;
  37 + }
  38 + final String? subtitleUrl = jsonConvert.convert<String>(json['subtitleUrl']);
  39 + if (subtitleUrl != null) {
  40 + listenEntity.subtitleUrl = subtitleUrl;
  41 + }
  42 + final String? title = jsonConvert.convert<String>(json['title']);
  43 + if (title != null) {
  44 + listenEntity.title = title;
  45 + }
  46 + final String? videoUrl = jsonConvert.convert<String>(json['videoUrl']);
  47 + if (videoUrl != null) {
  48 + listenEntity.videoUrl = videoUrl;
  49 + }
  50 + return listenEntity;
51 51 }
52 52  
53 53 Map<String, dynamic> $ListenEntityToJson(ListenEntity entity) {
54   - final Map<String, dynamic> data = <String, dynamic>{};
55   - data['coverUrl'] = entity.coverUrl;
56   - data['createTime'] = entity.createTime;
57   - data['deleted'] = entity.deleted;
58   - data['id'] = entity.id;
59   - data['lock'] = entity.lock;
60   - data['modifyTime'] = entity.modifyTime;
61   - data['sortOrder'] = entity.sortOrder;
62   - data['status'] = entity.status;
63   - data['subtitleUrl'] = entity.subtitleUrl;
64   - data['title'] = entity.title;
65   - data['videoUrl'] = entity.videoUrl;
66   - return data;
  54 + final Map<String, dynamic> data = <String, dynamic>{};
  55 + data['coverUrl'] = entity.coverUrl;
  56 + data['createTime'] = entity.createTime;
  57 + data['deleted'] = entity.deleted;
  58 + data['id'] = entity.id;
  59 + data['lock'] = entity.lock;
  60 + data['modifyTime'] = entity.modifyTime;
  61 + data['sortOrder'] = entity.sortOrder;
  62 + data['status'] = entity.status;
  63 + data['subtitleUrl'] = entity.subtitleUrl;
  64 + data['title'] = entity.title;
  65 + data['videoUrl'] = entity.videoUrl;
  66 + return data;
  67 +}
  68 +
  69 +extension ListenEntityExtension on ListenEntity {
  70 + ListenEntity copyWith({
  71 + String? coverUrl,
  72 + String? createTime,
  73 + String? deleted,
  74 + String? id,
  75 + bool? lock,
  76 + String? modifyTime,
  77 + double? sortOrder,
  78 + double? status,
  79 + String? subtitleUrl,
  80 + String? title,
  81 + String? videoUrl,
  82 + }) {
  83 + return ListenEntity()
  84 + ..coverUrl = coverUrl ?? this.coverUrl
  85 + ..createTime = createTime ?? this.createTime
  86 + ..deleted = deleted ?? this.deleted
  87 + ..id = id ?? this.id
  88 + ..lock = lock ?? this.lock
  89 + ..modifyTime = modifyTime ?? this.modifyTime
  90 + ..sortOrder = sortOrder ?? this.sortOrder
  91 + ..status = status ?? this.status
  92 + ..subtitleUrl = subtitleUrl ?? this.subtitleUrl
  93 + ..title = title ?? this.title
  94 + ..videoUrl = videoUrl ?? this.videoUrl;
  95 + }
67 96 }
68 97 \ No newline at end of file
... ...
lib/generated/json/product_entity.g.dart 0 → 100644
  1 +import 'package:wow_english/generated/json/base/json_convert_content.dart';
  2 +import 'package:wow_english/models/product_entity.dart';
  3 +
  4 +ProductEntity $ProductEntityFromJson(Map<String, dynamic> json) {
  5 + final ProductEntity productEntity = ProductEntity();
  6 + final String? name = jsonConvert.convert<String>(json['name']);
  7 + if (name != null) {
  8 + productEntity.name = name;
  9 + }
  10 + final double? price = jsonConvert.convert<double>(json['price']);
  11 + if (price != null) {
  12 + productEntity.price = price;
  13 + }
  14 + return productEntity;
  15 +}
  16 +
  17 +Map<String, dynamic> $ProductEntityToJson(ProductEntity entity) {
  18 + final Map<String, dynamic> data = <String, dynamic>{};
  19 + data['name'] = entity.name;
  20 + data['price'] = entity.price;
  21 + return data;
  22 +}
  23 +
  24 +extension ProductEntityExtension on ProductEntity {
  25 + ProductEntity copyWith({
  26 + String? name,
  27 + double? price,
  28 + }) {
  29 + return ProductEntity()
  30 + ..name = name ?? this.name
  31 + ..price = price ?? this.price;
  32 + }
  33 +}
0 34 \ No newline at end of file
... ...
lib/generated/json/read_content_entity.g.dart
... ... @@ -2,56 +2,82 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/read_content_entity.dart';
3 3  
4 4 ReadContentEntity $ReadContentEntityFromJson(Map<String, dynamic> json) {
5   - final ReadContentEntity readContentEntity = ReadContentEntity();
6   - final String? createTime = jsonConvert.convert<String>(json['createTime']);
7   - if (createTime != null) {
8   - readContentEntity.createTime = createTime;
9   - }
10   - final String? deleted = jsonConvert.convert<String>(json['deleted']);
11   - if (deleted != null) {
12   - readContentEntity.deleted = deleted;
13   - }
14   - final String? id = jsonConvert.convert<String>(json['id']);
15   - if (id != null) {
16   - readContentEntity.id = id;
17   - }
18   - final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
19   - if (modifyTime != null) {
20   - readContentEntity.modifyTime = modifyTime;
21   - }
22   - final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
23   - if (sortOrder != null) {
24   - readContentEntity.sortOrder = sortOrder;
25   - }
26   - final int? status = jsonConvert.convert<int>(json['status']);
27   - if (status != null) {
28   - readContentEntity.status = status;
29   - }
30   - final int? videoFollowReadId = jsonConvert.convert<int>(json['videoFollowReadId']);
31   - if (videoFollowReadId != null) {
32   - readContentEntity.videoFollowReadId = videoFollowReadId;
33   - }
34   - final String? videoUrl = jsonConvert.convert<String>(json['videoUrl']);
35   - if (videoUrl != null) {
36   - readContentEntity.videoUrl = videoUrl;
37   - }
38   - final String? word = jsonConvert.convert<String>(json['word']);
39   - if (word != null) {
40   - readContentEntity.word = word;
41   - }
42   - return readContentEntity;
  5 + final ReadContentEntity readContentEntity = ReadContentEntity();
  6 + final String? createTime = jsonConvert.convert<String>(json['createTime']);
  7 + if (createTime != null) {
  8 + readContentEntity.createTime = createTime;
  9 + }
  10 + final String? deleted = jsonConvert.convert<String>(json['deleted']);
  11 + if (deleted != null) {
  12 + readContentEntity.deleted = deleted;
  13 + }
  14 + final String? id = jsonConvert.convert<String>(json['id']);
  15 + if (id != null) {
  16 + readContentEntity.id = id;
  17 + }
  18 + final String? modifyTime = jsonConvert.convert<String>(json['modifyTime']);
  19 + if (modifyTime != null) {
  20 + readContentEntity.modifyTime = modifyTime;
  21 + }
  22 + final int? sortOrder = jsonConvert.convert<int>(json['sortOrder']);
  23 + if (sortOrder != null) {
  24 + readContentEntity.sortOrder = sortOrder;
  25 + }
  26 + final int? status = jsonConvert.convert<int>(json['status']);
  27 + if (status != null) {
  28 + readContentEntity.status = status;
  29 + }
  30 + final int? videoFollowReadId = jsonConvert.convert<int>(
  31 + json['videoFollowReadId']);
  32 + if (videoFollowReadId != null) {
  33 + readContentEntity.videoFollowReadId = videoFollowReadId;
  34 + }
  35 + final String? videoUrl = jsonConvert.convert<String>(json['videoUrl']);
  36 + if (videoUrl != null) {
  37 + readContentEntity.videoUrl = videoUrl;
  38 + }
  39 + final String? word = jsonConvert.convert<String>(json['word']);
  40 + if (word != null) {
  41 + readContentEntity.word = word;
  42 + }
  43 + return readContentEntity;
43 44 }
44 45  
45 46 Map<String, dynamic> $ReadContentEntityToJson(ReadContentEntity entity) {
46   - final Map<String, dynamic> data = <String, dynamic>{};
47   - data['createTime'] = entity.createTime;
48   - data['deleted'] = entity.deleted;
49   - data['id'] = entity.id;
50   - data['modifyTime'] = entity.modifyTime;
51   - data['sortOrder'] = entity.sortOrder;
52   - data['status'] = entity.status;
53   - data['videoFollowReadId'] = entity.videoFollowReadId;
54   - data['videoUrl'] = entity.videoUrl;
55   - data['word'] = entity.word;
56   - return data;
  47 + final Map<String, dynamic> data = <String, dynamic>{};
  48 + data['createTime'] = entity.createTime;
  49 + data['deleted'] = entity.deleted;
  50 + data['id'] = entity.id;
  51 + data['modifyTime'] = entity.modifyTime;
  52 + data['sortOrder'] = entity.sortOrder;
  53 + data['status'] = entity.status;
  54 + data['videoFollowReadId'] = entity.videoFollowReadId;
  55 + data['videoUrl'] = entity.videoUrl;
  56 + data['word'] = entity.word;
  57 + return data;
  58 +}
  59 +
  60 +extension ReadContentEntityExtension on ReadContentEntity {
  61 + ReadContentEntity copyWith({
  62 + String? createTime,
  63 + String? deleted,
  64 + String? id,
  65 + String? modifyTime,
  66 + int? sortOrder,
  67 + int? status,
  68 + int? videoFollowReadId,
  69 + String? videoUrl,
  70 + String? word,
  71 + }) {
  72 + return ReadContentEntity()
  73 + ..createTime = createTime ?? this.createTime
  74 + ..deleted = deleted ?? this.deleted
  75 + ..id = id ?? this.id
  76 + ..modifyTime = modifyTime ?? this.modifyTime
  77 + ..sortOrder = sortOrder ?? this.sortOrder
  78 + ..status = status ?? this.status
  79 + ..videoFollowReadId = videoFollowReadId ?? this.videoFollowReadId
  80 + ..videoUrl = videoUrl ?? this.videoUrl
  81 + ..word = word ?? this.word;
  82 + }
57 83 }
58 84 \ No newline at end of file
... ...
lib/generated/json/user_entity.g.dart
... ... @@ -2,61 +2,90 @@ import &#39;package:wow_english/generated/json/base/json_convert_content.dart&#39;;
2 2 import 'package:wow_english/models/user_entity.dart';
3 3  
4 4 UserEntity $UserEntityFromJson(Map<String, dynamic> json) {
5   - final UserEntity userEntity = UserEntity();
6   - final int? id = jsonConvert.convert<int>(json['id']);
7   - if (id != null) {
8   - userEntity.id = id;
9   - }
10   - final String? name = jsonConvert.convert<String>(json['name']);
11   - if (name != null) {
12   - userEntity.name = name;
13   - }
14   - final String? token = jsonConvert.convert<String>(json['token']);
15   - if (token != null) {
16   - userEntity.token = token;
17   - }
18   - final int? age = jsonConvert.convert<int>(json['age']);
19   - if (age != null) {
20   - userEntity.age = age;
21   - }
22   - final int? gender = jsonConvert.convert<int>(json['gender']);
23   - if (gender != null) {
24   - userEntity.gender = gender;
25   - }
26   - final String? avatarUrl = jsonConvert.convert<String>(json['avatarUrl']);
27   - if (avatarUrl != null) {
28   - userEntity.avatarUrl = avatarUrl;
29   - }
30   - final String? phoneNum = jsonConvert.convert<String>(json['phoneNum']);
31   - if (phoneNum != null) {
32   - userEntity.phoneNum = phoneNum;
33   - }
34   - final int? fillUserInfo = jsonConvert.convert<int>(json['fillUserInfo']);
35   - if (fillUserInfo != null) {
36   - userEntity.fillUserInfo = fillUserInfo;
37   - }
38   - final int? nowCourseModuleId = jsonConvert.convert<int>(json['nowCourseModuleId']);
39   - if (nowCourseModuleId != null) {
40   - userEntity.nowCourseModuleId = nowCourseModuleId;
41   - }
42   - final String? effectiveDate = jsonConvert.convert<String>(json['effectiveDate']);
43   - if (effectiveDate != null) {
44   - userEntity.effectiveDate = effectiveDate;
45   - }
46   - return userEntity;
  5 + final UserEntity userEntity = UserEntity();
  6 + final int? id = jsonConvert.convert<int>(json['id']);
  7 + if (id != null) {
  8 + userEntity.id = id;
  9 + }
  10 + final String? name = jsonConvert.convert<String>(json['name']);
  11 + if (name != null) {
  12 + userEntity.name = name;
  13 + }
  14 + final String? token = jsonConvert.convert<String>(json['token']);
  15 + if (token != null) {
  16 + userEntity.token = token;
  17 + }
  18 + final int? age = jsonConvert.convert<int>(json['age']);
  19 + if (age != null) {
  20 + userEntity.age = age;
  21 + }
  22 + final int? gender = jsonConvert.convert<int>(json['gender']);
  23 + if (gender != null) {
  24 + userEntity.gender = gender;
  25 + }
  26 + final String? avatarUrl = jsonConvert.convert<String>(json['avatarUrl']);
  27 + if (avatarUrl != null) {
  28 + userEntity.avatarUrl = avatarUrl;
  29 + }
  30 + final String? phoneNum = jsonConvert.convert<String>(json['phoneNum']);
  31 + if (phoneNum != null) {
  32 + userEntity.phoneNum = phoneNum;
  33 + }
  34 + final int? fillUserInfo = jsonConvert.convert<int>(json['fillUserInfo']);
  35 + if (fillUserInfo != null) {
  36 + userEntity.fillUserInfo = fillUserInfo;
  37 + }
  38 + final int? nowCourseModuleId = jsonConvert.convert<int>(
  39 + json['nowCourseModuleId']);
  40 + if (nowCourseModuleId != null) {
  41 + userEntity.nowCourseModuleId = nowCourseModuleId;
  42 + }
  43 + final String? effectiveDate = jsonConvert.convert<String>(
  44 + json['effectiveDate']);
  45 + if (effectiveDate != null) {
  46 + userEntity.effectiveDate = effectiveDate;
  47 + }
  48 + return userEntity;
47 49 }
48 50  
49 51 Map<String, dynamic> $UserEntityToJson(UserEntity entity) {
50   - final Map<String, dynamic> data = <String, dynamic>{};
51   - data['id'] = entity.id;
52   - data['name'] = entity.name;
53   - data['token'] = entity.token;
54   - data['age'] = entity.age;
55   - data['gender'] = entity.gender;
56   - data['avatarUrl'] = entity.avatarUrl;
57   - data['phoneNum'] = entity.phoneNum;
58   - data['fillUserInfo'] = entity.fillUserInfo;
59   - data['nowCourseModuleId'] = entity.nowCourseModuleId;
60   - data['effectiveDate'] = entity.effectiveDate;
61   - return data;
  52 + final Map<String, dynamic> data = <String, dynamic>{};
  53 + data['id'] = entity.id;
  54 + data['name'] = entity.name;
  55 + data['token'] = entity.token;
  56 + data['age'] = entity.age;
  57 + data['gender'] = entity.gender;
  58 + data['avatarUrl'] = entity.avatarUrl;
  59 + data['phoneNum'] = entity.phoneNum;
  60 + data['fillUserInfo'] = entity.fillUserInfo;
  61 + data['nowCourseModuleId'] = entity.nowCourseModuleId;
  62 + data['effectiveDate'] = entity.effectiveDate;
  63 + return data;
  64 +}
  65 +
  66 +extension UserEntityExtension on UserEntity {
  67 + UserEntity copyWith({
  68 + int? id,
  69 + String? name,
  70 + String? token,
  71 + int? age,
  72 + int? gender,
  73 + String? avatarUrl,
  74 + String? phoneNum,
  75 + int? fillUserInfo,
  76 + int? nowCourseModuleId,
  77 + String? effectiveDate,
  78 + }) {
  79 + return UserEntity()
  80 + ..id = id ?? this.id
  81 + ..name = name ?? this.name
  82 + ..token = token ?? this.token
  83 + ..age = age ?? this.age
  84 + ..gender = gender ?? this.gender
  85 + ..avatarUrl = avatarUrl ?? this.avatarUrl
  86 + ..phoneNum = phoneNum ?? this.phoneNum
  87 + ..fillUserInfo = fillUserInfo ?? this.fillUserInfo
  88 + ..nowCourseModuleId = nowCourseModuleId ?? this.nowCourseModuleId
  89 + ..effectiveDate = effectiveDate ?? this.effectiveDate;
  90 + }
62 91 }
63 92 \ No newline at end of file
... ...
lib/models/product_entity.dart 0 → 100644
  1 +import 'package:wow_english/generated/json/base/json_field.dart';
  2 +import 'package:wow_english/generated/json/product_entity.g.dart';
  3 +import 'dart:convert';
  4 +export 'package:wow_english/generated/json/product_entity.g.dart';
  5 +
  6 +@JsonSerializable()
  7 +class ProductEntity {
  8 + late String name;
  9 + late double price;
  10 + late String url;
  11 +
  12 + ProductEntity();
  13 +
  14 + factory ProductEntity.fromJson(Map<String, dynamic> json) => $ProductEntityFromJson(json);
  15 +
  16 + Map<String, dynamic> toJson() => $ProductEntityToJson(this);
  17 +
  18 + @override
  19 + String toString() {
  20 + return jsonEncode(this);
  21 + }
  22 +}
0 23 \ No newline at end of file
... ...
lib/pages/shop/home/shop_home_page.dart
... ... @@ -72,6 +72,7 @@ class _ShopHomeView extends StatelessWidget {
72 72 itemBuilder: (BuildContext context, int index) {
73 73 return LessonCardItem(onTap: () {
74 74 showToast('购买');
  75 + pushNamed(AppRouteName.pay);
75 76 });
76 77 }),
77 78 ),
... ...
lib/pages/shopping/bloc.dart 0 → 100644
  1 +import 'package:bloc/bloc.dart';
  2 +import 'package:wow_english/models/product_entity.dart';
  3 +
  4 +import '../../utils/log_util.dart';
  5 +import 'event.dart';
  6 +import 'state.dart';
  7 +
  8 +class ShoppingBloc extends Bloc<ShoppingEvent, ShoppingState> {
  9 +
  10 + ProductEntity? _productData;
  11 +
  12 + ProductEntity? get productData => _productData;
  13 +
  14 + PaymentChannel _curPaymentChannel = PaymentChannel.wechatPay;
  15 +
  16 + PaymentChannel get curPaymentChannel => _curPaymentChannel;
  17 +
  18 +
  19 + ShoppingBloc() : super(ShoppingState().init()) {
  20 + //页面初始化时刻
  21 + on<InitEvent>(_init);
  22 + on<ChangePaymentChannelEvent>(_changePaymentChannel);
  23 + }
  24 +
  25 + void _init(InitEvent event, Emitter<ShoppingState> emit) async {
  26 + //处理一些初始化操作,然后刷新界面
  27 + emit(state.clone());
  28 + }
  29 +
  30 + /// 更换支付渠道
  31 + void _changePaymentChannel(ChangePaymentChannelEvent event,
  32 + Emitter<ShoppingState> emitter) async {
  33 + Log.d("_curPaymentChannel=$_curPaymentChannel, event.paymentChannel=${event.paymentChannel}");
  34 + if (_curPaymentChannel != event.paymentChannel) {
  35 + _curPaymentChannel = event.paymentChannel;
  36 + emitter(PaymentChannelChangeState());
  37 + }
  38 + }
  39 +
  40 + void _gotoPay() {
  41 + // 跳转到支付页面
  42 + }
  43 +}
  44 +
  45 +enum PaymentChannel {
  46 +
  47 + wechatPay(1, "微信支付"),
  48 +
  49 + aliPay(2, "支付宝支付");
  50 +
  51 + const PaymentChannel(this.payChannelType, this.payChannelName);
  52 +
  53 + final int payChannelType;
  54 +
  55 + final String payChannelName;
  56 +}
... ...
lib/pages/shopping/event.dart 0 → 100644
  1 +import 'bloc.dart';
  2 +
  3 +abstract class ShoppingEvent {}
  4 +
  5 +class InitEvent extends ShoppingEvent {}
  6 +
  7 +class ChangePaymentChannelEvent extends ShoppingEvent {
  8 + final PaymentChannel paymentChannel;
  9 +
  10 + ChangePaymentChannelEvent(this.paymentChannel);
  11 +}
0 12 \ No newline at end of file
... ...
lib/pages/shopping/state.dart 0 → 100644
  1 +class ShoppingState {
  2 + ShoppingState init() {
  3 + return ShoppingState();
  4 + }
  5 +
  6 + ShoppingState clone() {
  7 + return ShoppingState();
  8 + }
  9 +}
  10 +
  11 +class PaymentChannelChangeState extends ShoppingState {}
0 12 \ No newline at end of file
... ...
lib/pages/shopping/view.dart 0 → 100644
  1 +import 'package:cached_network_image/cached_network_image.dart';
  2 +import 'package:flutter/material.dart';
  3 +import 'package:flutter_bloc/flutter_bloc.dart';
  4 +import 'package:flutter_screenutil/flutter_screenutil.dart';
  5 +import 'package:wow_english/common/extension/string_extension.dart';
  6 +
  7 +import '../../common/core/assets_const.dart';
  8 +import '../../common/widgets/we_app_bar.dart';
  9 +import '../../utils/image_util.dart';
  10 +import 'bloc.dart';
  11 +import 'event.dart';
  12 +import 'state.dart';
  13 +
  14 +Widget buildRadioOption({
  15 + required int value,
  16 + required ImageProvider icon,
  17 + required String text,
  18 + required int groupValue,
  19 + required ValueChanged onChanged,
  20 +}) {
  21 + return Row(
  22 + children: [
  23 + Image(image: icon,
  24 + width: 20.0.w,
  25 + height: 20.0.h,
  26 + fit: BoxFit.contain),
  27 + const SizedBox(width: 10.0),
  28 + // Expanded(
  29 + // child: Text(
  30 + // text,
  31 + // style: TextStyle(color: Color(0xFF333333), fontSize: 12.5.sp),
  32 + // ),
  33 + // ),
  34 + Text(
  35 + text,
  36 + style: TextStyle(color: Color(0xFF333333), fontSize: 12.5.sp),
  37 + ),
  38 + Radio(
  39 + value: value,
  40 + groupValue: groupValue,
  41 + onChanged: onChanged
  42 + ),
  43 + ],
  44 + );
  45 +}
  46 +
  47 +class ShoppingPage extends StatelessWidget {
  48 + const ShoppingPage({super.key});
  49 +
  50 + @override
  51 + Widget build(BuildContext context) {
  52 + return BlocProvider(
  53 + create: (BuildContext context) =>
  54 + ShoppingBloc()
  55 + ..add(InitEvent()),
  56 + child: _ShoppingView(),
  57 + );
  58 + }
  59 +}
  60 +
  61 +class _ShoppingView extends StatelessWidget {
  62 +
  63 + @override
  64 + Widget build(BuildContext context) {
  65 + final bloc = BlocProvider.of<ShoppingBloc>(context);
  66 + return BlocListener<ShoppingBloc, ShoppingState>(
  67 + listener: (context, state) {
  68 + },
  69 + child: Scaffold(
  70 + appBar: const WEAppBar(
  71 + //标题传进来的
  72 + titleText: '支付',
  73 + ),
  74 + body: Container(
  75 + margin: const EdgeInsets.only(left: 80.0, top: 28.0, right: 56.0),
  76 + child: Row(
  77 + crossAxisAlignment: CrossAxisAlignment.start,
  78 + children: [
  79 + CachedNetworkImage(
  80 + imageUrl: "${bloc.productData?.url}",
  81 + imageBuilder: (context, imageProvider) =>
  82 + Container(
  83 + decoration: BoxDecoration(
  84 + image: DecorationImage(
  85 + image: imageProvider,
  86 + fit: BoxFit.cover,
  87 + ),
  88 + borderRadius: BorderRadius.circular(5.0),
  89 + ),
  90 + ),
  91 + placeholder: (context, url) =>
  92 + const CircularProgressIndicator(),
  93 + // errorWidget: (context, url, error) => const Icon(Icons.error),
  94 + height: 210.0.h,
  95 + width: 210.0.w,
  96 + ),
  97 + const SizedBox(width: 35.5),
  98 + _paymentWidget(),
  99 + ],
  100 + ),
  101 + ),
  102 + ),);
  103 + }
  104 +}
  105 +
  106 +Widget _paymentWidget() =>
  107 + BlocBuilder<ShoppingBloc, ShoppingState>
  108 + (
  109 + builder: (context, state) {
  110 + final bloc = BlocProvider.of<ShoppingBloc>(context);
  111 + return Column(
  112 + crossAxisAlignment: CrossAxisAlignment.start,
  113 + children: [
  114 + Text('套餐价格:${bloc.productData?.price ?? "199(记得删除)"}',
  115 + style: TextStyle(
  116 + color: const Color(0xFF333333), fontSize: 16.sp)),
  117 + const SizedBox(height: 15.0),
  118 + Text('套餐名称:${bloc.productData?.name ?? ''}',
  119 + style: TextStyle(
  120 + color: const Color(0xFF333333), fontSize: 16.sp)),
  121 + const SizedBox(height: 15.0),
  122 + Container(
  123 + padding:
  124 + EdgeInsets.symmetric(horizontal: 6.w, vertical: 10.h),
  125 + decoration: BoxDecoration(
  126 + image: DecorationImage(
  127 + image: ImageUtil.getImageProviderOnDefault(
  128 + AssetsConst.bgUserInformationText),
  129 + fit: BoxFit.fill)),
  130 + child: const Text('支付方式选择',
  131 + style: TextStyle(
  132 + color: Color(0xFF333333),
  133 + fontSize: 12,
  134 + fontFamily: 'PingFangSC-Regular')),
  135 + ),
  136 + const SizedBox(height: 15.0),
  137 + buildRadioOption(
  138 + value: PaymentChannel.wechatPay.payChannelType,
  139 + icon: AssetImage('weixin'.assetPng),
  140 + text: PaymentChannel.wechatPay.payChannelName,
  141 + groupValue: bloc.curPaymentChannel.payChannelType,
  142 + onChanged: (newValue) {
  143 + bloc.add(
  144 + ChangePaymentChannelEvent(PaymentChannel.wechatPay));
  145 + },
  146 + ),
  147 + buildRadioOption(
  148 + value: PaymentChannel.aliPay.payChannelType,
  149 + icon: AssetImage('zhifubao'.assetPng),
  150 + text: PaymentChannel.aliPay.payChannelName,
  151 + groupValue: bloc.curPaymentChannel.payChannelType,
  152 + onChanged: (newValue) {
  153 + bloc.add(
  154 + ChangePaymentChannelEvent(PaymentChannel.aliPay));
  155 + },
  156 + ),
  157 + const SizedBox(height: 15.0),
  158 + // 确认支付按钮
  159 + InkWell(
  160 + onTap: () {
  161 + },
  162 + child: Image(
  163 + width: 125.w,
  164 + height: 45.h,
  165 + image: AssetImage('btn_pay'.assetPng),
  166 + ),
  167 + ),
  168 + ],
  169 + );
  170 + },
  171 + );
... ...
lib/route/route.dart
... ... @@ -23,6 +23,7 @@ import &#39;package:wow_english/pages/user/user_page.dart&#39;;
23 23 import 'package:wow_english/pages/video/lookvideo/look_video_page.dart';
24 24  
25 25 import '../pages/reading/reading_page.dart';
  26 +import '../pages/shopping/view.dart';
26 27 import '../pages/user/setting/delete_account_page.dart';
27 28 import '../pages/user/setting/reback_page.dart';
28 29  
... ... @@ -43,6 +44,7 @@ class AppRouteName {
43 44 static const String reAfter = 'reAfter';
44 45 static const String topicPic = 'topicPic';
45 46 static const String user = 'user';
  47 + static const String pay = 'pay';
46 48  
47 49 /// 用户详细信息页
48 50 static const String userInformation = 'userInformation';
... ... @@ -101,6 +103,8 @@ class AppRouter {
101 103 return CupertinoPageRoute(builder: (_) => const ListenPage());
102 104 case AppRouteName.shop:
103 105 return CupertinoPageRoute(builder: (_) => const ShopHomePage());
  106 + case AppRouteName.pay:
  107 + return CupertinoPageRoute(builder: (_) => const ShoppingPage());
104 108 case AppRouteName.exLesson:
105 109 return CupertinoPageRoute(builder: (_) => const ExchangeLessonPage());
106 110 case AppRouteName.exList:
... ...
pubspec.yaml
... ... @@ -66,9 +66,9 @@ dependencies:
66 66 # 拍照,从相册中选择 https://pub.flutter-io.cn/packages/image_picker
67 67 image_picker: ^0.8.7+5
68 68 # 支付宝支付SDK https://pub.flutter-io.cn/packages/tobias
69   - # tobias: ^3.1.0
  69 + tobias: ^3.1.0
70 70 # 微信SDK相关 https://pub.flutter-io.cn/packages/fluwx
71   - # fluwx: ^4.2.4+1
  71 + fluwx: ^4.5.5
72 72 # json数据解析 https://pub.flutter-io.cn/packages/json_annotation
73 73 json_annotation: ^4.8.1
74 74 # double丢失精度问题 https://pub.dev/packages/decimal
... ...