Commit e5c9e98fe7e9b58db796760342d672c0aea83416

Authored by liangchengyou
1 parent 1e7094e3

feat:首页模块颜色

lib/generated/json/course_entity.g.dart
@@ -23,6 +23,10 @@ CourseEntity $CourseEntityFromJson(Map<String, dynamic> json) { @@ -23,6 +23,10 @@ CourseEntity $CourseEntityFromJson(Map<String, dynamic> json) {
23 if (totalCourseLesson != null) { 23 if (totalCourseLesson != null) {
24 courseEntity.totalCourseLesson = totalCourseLesson; 24 courseEntity.totalCourseLesson = totalCourseLesson;
25 } 25 }
  26 + final String? courseModuleThemeColor = jsonConvert.convert<String>(json['courseModuleThemeColor']);
  27 + if (courseModuleThemeColor != null) {
  28 + courseEntity.courseModuleThemeColor = courseModuleThemeColor;
  29 + }
26 return courseEntity; 30 return courseEntity;
27 } 31 }
28 32
@@ -33,6 +37,7 @@ Map&lt;String, dynamic&gt; $CourseEntityToJson(CourseEntity entity) { @@ -33,6 +37,7 @@ Map&lt;String, dynamic&gt; $CourseEntityToJson(CourseEntity entity) {
33 data['nowCourseModuleId'] = entity.nowCourseModuleId; 37 data['nowCourseModuleId'] = entity.nowCourseModuleId;
34 data['nowCourseModuleName'] = entity.nowCourseModuleName; 38 data['nowCourseModuleName'] = entity.nowCourseModuleName;
35 data['totalCourseLesson'] = entity.totalCourseLesson; 39 data['totalCourseLesson'] = entity.totalCourseLesson;
  40 + data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
36 return data; 41 return data;
37 } 42 }
38 43
@@ -86,10 +91,6 @@ CourseCourseLessons $CourseCourseLessonsFromJson(Map&lt;String, dynamic&gt; json) { @@ -86,10 +91,6 @@ CourseCourseLessons $CourseCourseLessonsFromJson(Map&lt;String, dynamic&gt; json) {
86 if (status != null) { 91 if (status != null) {
87 courseCourseLessons.status = status; 92 courseCourseLessons.status = status;
88 } 93 }
89 - final String? courseModuleThemeColor = jsonConvert.convert<String>(json['courseModuleThemeColor']);  
90 - if (courseModuleThemeColor != null) {  
91 - courseCourseLessons.courseModuleThemeColor = courseModuleThemeColor;  
92 - }  
93 return courseCourseLessons; 94 return courseCourseLessons;
94 } 95 }
95 96
@@ -107,6 +108,5 @@ Map&lt;String, dynamic&gt; $CourseCourseLessonsToJson(CourseCourseLessons entity) { @@ -107,6 +108,5 @@ Map&lt;String, dynamic&gt; $CourseCourseLessonsToJson(CourseCourseLessons entity) {
107 data['name'] = entity.name; 108 data['name'] = entity.name;
108 data['sortOrder'] = entity.sortOrder; 109 data['sortOrder'] = entity.sortOrder;
109 data['status'] = entity.status; 110 data['status'] = entity.status;
110 - data['courseModuleThemeColor'] = entity.courseModuleThemeColor;  
111 return data; 111 return data;
112 } 112 }
113 \ No newline at end of file 113 \ No newline at end of file
lib/generated/json/course_module_entity.g.dart
@@ -59,6 +59,11 @@ CourseModuleEntity $CourseModuleEntityFromJson(Map&lt;String, dynamic&gt; json) { @@ -59,6 +59,11 @@ CourseModuleEntity $CourseModuleEntityFromJson(Map&lt;String, dynamic&gt; json) {
59 if (status != null) { 59 if (status != null) {
60 courseModuleEntity.status = status; 60 courseModuleEntity.status = status;
61 } 61 }
  62 +
  63 + final String? courseModuleThemeColor = jsonConvert.convert<String>(json['courseModuleThemeColor']);
  64 + if (courseModuleThemeColor != null) {
  65 + courseModuleEntity.courseModuleThemeColor = courseModuleThemeColor;
  66 + }
62 return courseModuleEntity; 67 return courseModuleEntity;
63 } 68 }
64 69
@@ -78,5 +83,6 @@ Map&lt;String, dynamic&gt; $CourseModuleEntityToJson(CourseModuleEntity entity) { @@ -78,5 +83,6 @@ Map&lt;String, dynamic&gt; $CourseModuleEntityToJson(CourseModuleEntity entity) {
78 data['picUrl'] = entity.picUrl; 83 data['picUrl'] = entity.picUrl;
79 data['sortOrder'] = entity.sortOrder; 84 data['sortOrder'] = entity.sortOrder;
80 data['status'] = entity.status; 85 data['status'] = entity.status;
  86 + data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
81 return data; 87 return data;
82 } 88 }
83 \ No newline at end of file 89 \ No newline at end of file
lib/models/course_entity.dart
@@ -9,6 +9,7 @@ class CourseEntity { @@ -9,6 +9,7 @@ class CourseEntity {
9 int? nowCourseModuleId; 9 int? nowCourseModuleId;
10 String? nowCourseModuleName; 10 String? nowCourseModuleName;
11 int? totalCourseLesson; 11 int? totalCourseLesson;
  12 + String? courseModuleThemeColor;
12 13
13 CourseEntity(); 14 CourseEntity();
14 15
@@ -36,7 +37,6 @@ class CourseCourseLessons { @@ -36,7 +37,6 @@ class CourseCourseLessons {
36 String? name; 37 String? name;
37 int? sortOrder; 38 int? sortOrder;
38 int? status; 39 int? status;
39 - String? courseModuleThemeColor;  
40 40
41 CourseCourseLessons(); 41 CourseCourseLessons();
42 42
lib/models/course_module_entity.dart
@@ -19,6 +19,7 @@ class CourseModuleEntity { @@ -19,6 +19,7 @@ class CourseModuleEntity {
19 String? picUrl; 19 String? picUrl;
20 int? sortOrder; 20 int? sortOrder;
21 int? status; 21 int? status;
  22 + String? courseModuleThemeColor;
22 23
23 CourseModuleEntity(); 24 CourseModuleEntity();
24 25
lib/pages/home/home_page.dart
@@ -8,6 +8,7 @@ import &#39;package:wow_english/pages/home/widgets/home_bouns_item.dart&#39;; @@ -8,6 +8,7 @@ import &#39;package:wow_english/pages/home/widgets/home_bouns_item.dart&#39;;
8 import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart'; 8 import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart';
9 import 'package:wow_english/pages/home/widgets/home_vidoe_item.dart'; 9 import 'package:wow_english/pages/home/widgets/home_vidoe_item.dart';
10 import 'package:wow_english/route/route.dart'; 10 import 'package:wow_english/route/route.dart';
  11 +import 'package:wow_english/utils/color_util.dart';
11 import 'package:wow_english/utils/toast_util.dart'; 12 import 'package:wow_english/utils/toast_util.dart';
12 13
13 import 'bloc/home_bloc.dart'; 14 import 'bloc/home_bloc.dart';
@@ -88,13 +89,14 @@ class _HomePageView extends StatelessWidget { @@ -88,13 +89,14 @@ class _HomePageView extends StatelessWidget {
88 mainAxisAlignment: MainAxisAlignment.spaceBetween, 89 mainAxisAlignment: MainAxisAlignment.spaceBetween,
89 children: [ 90 children: [
90 HomeTabHeaderWidget( 91 HomeTabHeaderWidget(
  92 + themColor: bloc.modelData?.courseModuleThemeColor,
91 actionTap: (HeaderActionType type) { 93 actionTap: (HeaderActionType type) {
92 _headerActionEvent(type); 94 _headerActionEvent(type);
93 }, 95 },
94 ), 96 ),
95 Expanded( 97 Expanded(
96 child: ListView.builder( 98 child: ListView.builder(
97 - itemCount: bloc.modelData?.totalCourseLesson, 99 + itemCount: bloc.modelData?.totalCourseLesson??0,
98 scrollDirection: Axis.horizontal, 100 scrollDirection: Axis.horizontal,
99 itemBuilder: (BuildContext context, int index) { 101 itemBuilder: (BuildContext context, int index) {
100 CourseCourseLessons? data = bloc.modelData?.courseLessons?[index]; 102 CourseCourseLessons? data = bloc.modelData?.courseLessons?[index];
@@ -133,6 +135,7 @@ class _HomePageView extends StatelessWidget { @@ -133,6 +135,7 @@ class _HomePageView extends StatelessWidget {
133 bloc.add(RequestVideoLessonEvent(data.id!,data.courseType!)); 135 bloc.add(RequestVideoLessonEvent(data.id!,data.courseType!));
134 }, 136 },
135 child: HomeVideoItem( 137 child: HomeVideoItem(
  138 + themColor: bloc.modelData?.courseModuleThemeColor,
136 lessons: data, 139 lessons: data,
137 ), 140 ),
138 ); 141 );
@@ -150,12 +153,12 @@ class _HomePageView extends StatelessWidget { @@ -150,12 +153,12 @@ class _HomePageView extends StatelessWidget {
150 ), 153 ),
151 Container( 154 Container(
152 decoration: BoxDecoration( 155 decoration: BoxDecoration(
153 - color: Colors.blue, 156 + color: HexColor(bloc.modelData?.courseModuleThemeColor??''),
154 borderRadius: BorderRadius.circular(14.5.r), 157 borderRadius: BorderRadius.circular(14.5.r),
155 ), 158 ),
156 padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 24.w), 159 padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 24.w),
157 child: Text( 160 child: Text(
158 - '${(bloc.modelData?.nowCourseLesson)}/${bloc.modelData?.totalCourseLesson}', 161 + '${(bloc.modelData?.nowCourseLesson??0)}/${bloc.modelData?.totalCourseLesson??0}',
159 style: TextStyle(color: Colors.white, fontSize: 12.sp), 162 style: TextStyle(color: Colors.white, fontSize: 12.sp),
160 ), 163 ),
161 ), 164 ),
lib/pages/home/widgets/home_tab_header_widget.dart
@@ -2,6 +2,7 @@ import &#39;package:flutter/material.dart&#39;; @@ -2,6 +2,7 @@ import &#39;package:flutter/material.dart&#39;;
2 import 'package:flutter_screenutil/flutter_screenutil.dart'; 2 import 'package:flutter_screenutil/flutter_screenutil.dart';
3 import 'package:wow_english/common/core/user_util.dart'; 3 import 'package:wow_english/common/core/user_util.dart';
4 import 'package:wow_english/common/extension/string_extension.dart'; 4 import 'package:wow_english/common/extension/string_extension.dart';
  5 +import 'package:wow_english/utils/color_util.dart';
5 import 'package:wow_english/utils/image_util.dart'; 6 import 'package:wow_english/utils/image_util.dart';
6 7
7 enum HeaderActionType { 8 enum HeaderActionType {
@@ -18,8 +19,9 @@ enum HeaderActionType { @@ -18,8 +19,9 @@ enum HeaderActionType {
18 } 19 }
19 20
20 class HomeTabHeaderWidget extends StatelessWidget { 21 class HomeTabHeaderWidget extends StatelessWidget {
21 - const HomeTabHeaderWidget({super.key, this.actionTap}); 22 + const HomeTabHeaderWidget({super.key, this.actionTap, this.themColor});
22 23
  24 + final String? themColor;
23 final Function(HeaderActionType type)? actionTap; 25 final Function(HeaderActionType type)? actionTap;
24 26
25 @override 27 @override
@@ -27,7 +29,7 @@ class HomeTabHeaderWidget extends StatelessWidget { @@ -27,7 +29,7 @@ class HomeTabHeaderWidget extends StatelessWidget {
27 return Container( 29 return Container(
28 height: 45, 30 height: 45,
29 width: double.infinity, 31 width: double.infinity,
30 - color: Colors.purple, 32 + color: HexColor(themColor??''),
31 padding: EdgeInsets.symmetric(horizontal: 9.5.w), 33 padding: EdgeInsets.symmetric(horizontal: 9.5.w),
32 child: Row( 34 child: Row(
33 children: [ 35 children: [
lib/pages/home/widgets/home_vidoe_item.dart
@@ -3,10 +3,12 @@ import &#39;package:flutter_screenutil/flutter_screenutil.dart&#39;; @@ -3,10 +3,12 @@ import &#39;package:flutter_screenutil/flutter_screenutil.dart&#39;;
3 import 'package:wow_english/common/extension/string_extension.dart'; 3 import 'package:wow_english/common/extension/string_extension.dart';
4 import 'package:wow_english/common/widgets/ow_image_widget.dart'; 4 import 'package:wow_english/common/widgets/ow_image_widget.dart';
5 import 'package:wow_english/models/course_entity.dart'; 5 import 'package:wow_english/models/course_entity.dart';
  6 +import 'package:wow_english/utils/color_util.dart';
6 7
7 class HomeVideoItem extends StatelessWidget { 8 class HomeVideoItem extends StatelessWidget {
8 - const HomeVideoItem({super.key, this.lessons}); 9 + const HomeVideoItem({super.key, this.lessons, this.themColor});
9 10
  11 + final String? themColor;
10 final CourseCourseLessons? lessons; 12 final CourseCourseLessons? lessons;
11 13
12 @override 14 @override
@@ -46,6 +48,7 @@ class HomeVideoItem extends StatelessWidget { @@ -46,6 +48,7 @@ class HomeVideoItem extends StatelessWidget {
46 width: 2, 48 width: 2,
47 color: const Color(0xFF140C10), 49 color: const Color(0xFF140C10),
48 ), 50 ),
  51 + color: HexColor(themColor??''),
49 borderRadius: BorderRadius.circular(6) 52 borderRadius: BorderRadius.circular(6)
50 ), 53 ),
51 padding: EdgeInsets.symmetric(horizontal: 10.w), 54 padding: EdgeInsets.symmetric(horizontal: 10.w),
lib/pages/lessons/lesson_page.dart
@@ -43,7 +43,7 @@ class _LessonPageView extends StatelessWidget { @@ -43,7 +43,7 @@ class _LessonPageView extends StatelessWidget {
43 appBar: WEAppBar( 43 appBar: WEAppBar(
44 leading: IconButton( 44 leading: IconButton(
45 onPressed: (){ 45 onPressed: (){
46 - Navigator.pop(context); 46 + popPage();
47 }, 47 },
48 icon: Image.asset( 48 icon: Image.asset(
49 'back'.assetPng, 49 'back'.assetPng,
lib/pages/lessons/widgets/lesson_item_widget.dart
@@ -3,6 +3,7 @@ import &#39;package:flutter_screenutil/flutter_screenutil.dart&#39;; @@ -3,6 +3,7 @@ import &#39;package:flutter_screenutil/flutter_screenutil.dart&#39;;
3 import 'package:wow_english/common/extension/string_extension.dart'; 3 import 'package:wow_english/common/extension/string_extension.dart';
4 import 'package:wow_english/common/widgets/ow_image_widget.dart'; 4 import 'package:wow_english/common/widgets/ow_image_widget.dart';
5 import 'package:wow_english/models/course_module_entity.dart'; 5 import 'package:wow_english/models/course_module_entity.dart';
  6 +import 'package:wow_english/utils/color_util.dart';
6 7
7 class LessonItemWidget extends StatelessWidget { 8 class LessonItemWidget extends StatelessWidget {
8 const LessonItemWidget({super.key, required this.isSelected, this.model, this.onClickEvent}); 9 const LessonItemWidget({super.key, required this.isSelected, this.model, this.onClickEvent});
@@ -59,7 +60,7 @@ class LessonItemWidget extends StatelessWidget { @@ -59,7 +60,7 @@ class LessonItemWidget extends StatelessWidget {
59 10.verticalSpace, 60 10.verticalSpace,
60 Container( 61 Container(
61 decoration: BoxDecoration( 62 decoration: BoxDecoration(
62 - color: Colors.red, 63 + color: HexColor(model?.courseModuleThemeColor??'#FFC0C3E7'),
63 borderRadius: BorderRadius.circular(6.r), 64 borderRadius: BorderRadius.circular(6.r),
64 border: Border.all( 65 border: Border.all(
65 color: const Color(0xFF333333), 66 color: const Color(0xFF333333),
lib/pages/user/information/user_information_page.dart
@@ -40,12 +40,11 @@ class _UserInformationView extends StatelessWidget { @@ -40,12 +40,11 @@ class _UserInformationView extends StatelessWidget {
40 } 40 }
41 41
42 class _UserInformationContentView extends StatelessWidget { 42 class _UserInformationContentView extends StatelessWidget {
43 - const _UserInformationContentView({super.key});  
44 43
45 void _openModifyPage(BuildContext context, ModifyUserInformationType type) { 44 void _openModifyPage(BuildContext context, ModifyUserInformationType type) {
46 Log.d('_openModifyPage($type)'); 45 Log.d('_openModifyPage($type)');
47 // 暂时关闭修改,修复后打开 46 // 暂时关闭修改,修复后打开
48 - //ModifyUserInformationPage.push(context, type); 47 + // ModifyUserInformationPage.push(context, type);
49 } 48 }
50 49
51 @override 50 @override
lib/pages/user/modify/modify_user_information_page.dart
@@ -79,7 +79,7 @@ class ModifyUserInformationPage extends StatelessWidget { @@ -79,7 +79,7 @@ class ModifyUserInformationPage extends StatelessWidget {
79 alignment: Alignment.center, 79 alignment: Alignment.center,
80 width: 90.w, 80 width: 90.w,
81 height: 44.h, 81 height: 44.h,
82 - decoration: BoxDecoration( 82 + decoration: const BoxDecoration(
83 image: DecorationImage(image: AssetImage(AssetsConst.bgButtonBlue), fit: BoxFit.fill), 83 image: DecorationImage(image: AssetImage(AssetsConst.bgButtonBlue), fit: BoxFit.fill),
84 ), 84 ),
85 child: Text( 85 child: Text(
@@ -120,54 +120,9 @@ class ModifyUserInformationPage extends StatelessWidget { @@ -120,54 +120,9 @@ class ModifyUserInformationPage extends StatelessWidget {
120 if (type == ModifyUserInformationType.gender) { 120 if (type == ModifyUserInformationType.gender) {
121 return Row( 121 return Row(
122 children: <Widget>[ 122 children: <Widget>[
123 - SizedBox(  
124 - width: 100.w,  
125 - child: RadioListTile(  
126 - title: Text(  
127 - '男',  
128 - style: TextStyle(  
129 - fontWeight: FontWeight.w700,  
130 - color: const Color(0xFF333333),  
131 - fontSize: 21.sp,  
132 - ),  
133 - ),  
134 - activeColor: const Color(0xFF0E89BA),  
135 - value: 0,  
136 - //selected: user.gender == 0,  
137 - groupValue: userBloc.tempGender,  
138 - onChanged: (value) {  
139 - Log.d('男value = $value');  
140 - if (value != null) {  
141 - userBloc.tempGender = value;  
142 - }  
143 - userBloc.add(UserUIUpdate(type));  
144 - },  
145 - ),  
146 - ),  
147 - SizedBox(  
148 - width: 100.w,  
149 - child: RadioListTile<int>(  
150 - //selected: user.gender == 1,  
151 - title: Text(  
152 - '女',  
153 - style: TextStyle(  
154 - fontWeight: FontWeight.w700,  
155 - color: const Color(0xFF333333),  
156 - fontSize: 21.sp,  
157 - ),  
158 - ),  
159 - activeColor: const Color(0xFF0E89BA),  
160 - value: 1,  
161 - groupValue: userBloc.tempGender,  
162 - onChanged: (int? value) {  
163 - Log.d('女value = $value');  
164 - if (value != null) {  
165 - userBloc.tempGender = value;  
166 - }  
167 - userBloc.add(UserUIUpdate(type));  
168 - },  
169 - ),  
170 - ), 123 + _buildSexWidget('男', true),
  124 + 70.horizontalSpace,
  125 + _buildSexWidget('女', false)
171 ], 126 ],
172 ); 127 );
173 } 128 }
@@ -203,4 +158,34 @@ class ModifyUserInformationPage extends StatelessWidget { @@ -203,4 +158,34 @@ class ModifyUserInformationPage extends StatelessWidget {
203 },*/ 158 },*/
204 ); 159 );
205 } 160 }
  161 +
  162 + Widget _buildSexWidget(String title,bool isSelect) {
  163 + return Row(
  164 + children: [
  165 + Container(
  166 + width: 21.h,
  167 + height: 21.h,
  168 + padding: EdgeInsets.all(4.h),
  169 + decoration: BoxDecoration(
  170 + borderRadius: BorderRadius.circular(21.r),
  171 + border: Border.all(
  172 + color: const Color(0xFF140C10),
  173 + width: 1.5
  174 + )
  175 + ),
  176 + child: Offstage(
  177 + offstage:!isSelect,
  178 + child: ClipRRect(
  179 + borderRadius: BorderRadius.circular(13.r),
  180 + child: Container(
  181 + color: Colors.blue,
  182 + ),
  183 + ),
  184 + ),
  185 + ),
  186 + 5.horizontalSpace,
  187 + Text(title)
  188 + ],
  189 + );
  190 + }
206 } 191 }
lib/pages/user/user_page.dart
@@ -137,14 +137,14 @@ class _UserView extends StatelessWidget { @@ -137,14 +137,14 @@ class _UserView extends StatelessWidget {
137 style: textStyle21sp, 137 style: textStyle21sp,
138 ), 138 ),
139 onPressed: () { 139 onPressed: () {
140 - Navigator.of(AppRouter.context).pushNamed(AppRouteName.userInformation); 140 + pushNamed(AppRouteName.userInformation);
141 }, 141 },
142 ) 142 )
143 ], 143 ],
144 ), 144 ),
145 30.verticalSpace, 145 30.verticalSpace,
146 OutlinedButton( 146 OutlinedButton(
147 - onPressed: () => Navigator.of(context).pushNamed(AppRouteName.fogPwd), 147 + onPressed: () => pushNamed(AppRouteName.fogPwd),
148 style: normalButtonStyle, 148 style: normalButtonStyle,
149 child: Text( 149 child: Text(
150 "修改密码", 150 "修改密码",
@@ -153,7 +153,7 @@ class _UserView extends StatelessWidget { @@ -153,7 +153,7 @@ class _UserView extends StatelessWidget {
153 ), 153 ),
154 12.verticalSpace, 154 12.verticalSpace,
155 OutlinedButton( 155 OutlinedButton(
156 - onPressed: () => Navigator.of(context).pushNamed(AppRouteName.exLesson), 156 + onPressed: () => pushNamed(AppRouteName.exLesson),
157 style: normalButtonStyle, 157 style: normalButtonStyle,
158 child: Text( 158 child: Text(
159 "兑换课程", 159 "兑换课程",
@@ -161,9 +161,8 @@ class _UserView extends StatelessWidget { @@ -161,9 +161,8 @@ class _UserView extends StatelessWidget {
161 )), 161 )),
162 12.verticalSpace, 162 12.verticalSpace,
163 OutlinedButton( 163 OutlinedButton(
164 - onPressed: () => {  
165 - Navigator.of(context).pushNamed(AppRouteName.webView,  
166 - arguments: {'urlStr': AppConsts.userPrivacyPolicyUrl, 'webViewTitle': '隐私协议'}) 164 + onPressed: () {
  165 + pushNamed(AppRouteName.webView,arguments: {'urlStr': AppConsts.userPrivacyPolicyUrl, 'webViewTitle': '隐私协议'});
167 }, 166 },
168 style: normalButtonStyle, 167 style: normalButtonStyle,
169 child: Text( 168 child: Text(
lib/utils/color_util.dart 0 → 100644
  1 +import 'dart:ui';
  2 +
  3 +class HexColor extends Color {
  4 + static int _getColorFromHex(String hexColor) {
  5 + if (hexColor.isEmpty) {
  6 + hexColor = '#FFC0C3E7';
  7 + }
  8 + hexColor = hexColor.toUpperCase().replaceAll("#", "");
  9 + hexColor = hexColor.replaceAll('0X', '');
  10 + if (hexColor.length == 6) {
  11 + hexColor = "FF$hexColor";
  12 + }
  13 + return int.parse(hexColor, radix: 16);
  14 + }
  15 +
  16 + HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
  17 +}
0 \ No newline at end of file 18 \ No newline at end of file