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 23 if (totalCourseLesson != null) {
24 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 30 return courseEntity;
27 31 }
28 32  
... ... @@ -33,6 +37,7 @@ Map&lt;String, dynamic&gt; $CourseEntityToJson(CourseEntity entity) {
33 37 data['nowCourseModuleId'] = entity.nowCourseModuleId;
34 38 data['nowCourseModuleName'] = entity.nowCourseModuleName;
35 39 data['totalCourseLesson'] = entity.totalCourseLesson;
  40 + data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
36 41 return data;
37 42 }
38 43  
... ... @@ -86,10 +91,6 @@ CourseCourseLessons $CourseCourseLessonsFromJson(Map&lt;String, dynamic&gt; json) {
86 91 if (status != null) {
87 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 94 return courseCourseLessons;
94 95 }
95 96  
... ... @@ -107,6 +108,5 @@ Map&lt;String, dynamic&gt; $CourseCourseLessonsToJson(CourseCourseLessons entity) {
107 108 data['name'] = entity.name;
108 109 data['sortOrder'] = entity.sortOrder;
109 110 data['status'] = entity.status;
110   - data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
111 111 return data;
112 112 }
113 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 59 if (status != null) {
60 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 67 return courseModuleEntity;
63 68 }
64 69  
... ... @@ -78,5 +83,6 @@ Map&lt;String, dynamic&gt; $CourseModuleEntityToJson(CourseModuleEntity entity) {
78 83 data['picUrl'] = entity.picUrl;
79 84 data['sortOrder'] = entity.sortOrder;
80 85 data['status'] = entity.status;
  86 + data['courseModuleThemeColor'] = entity.courseModuleThemeColor;
81 87 return data;
82 88 }
83 89 \ No newline at end of file
... ...
lib/models/course_entity.dart
... ... @@ -9,6 +9,7 @@ class CourseEntity {
9 9 int? nowCourseModuleId;
10 10 String? nowCourseModuleName;
11 11 int? totalCourseLesson;
  12 + String? courseModuleThemeColor;
12 13  
13 14 CourseEntity();
14 15  
... ... @@ -36,7 +37,6 @@ class CourseCourseLessons {
36 37 String? name;
37 38 int? sortOrder;
38 39 int? status;
39   - String? courseModuleThemeColor;
40 40  
41 41 CourseCourseLessons();
42 42  
... ...
lib/models/course_module_entity.dart
... ... @@ -19,6 +19,7 @@ class CourseModuleEntity {
19 19 String? picUrl;
20 20 int? sortOrder;
21 21 int? status;
  22 + String? courseModuleThemeColor;
22 23  
23 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 8 import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart';
9 9 import 'package:wow_english/pages/home/widgets/home_vidoe_item.dart';
10 10 import 'package:wow_english/route/route.dart';
  11 +import 'package:wow_english/utils/color_util.dart';
11 12 import 'package:wow_english/utils/toast_util.dart';
12 13  
13 14 import 'bloc/home_bloc.dart';
... ... @@ -88,13 +89,14 @@ class _HomePageView extends StatelessWidget {
88 89 mainAxisAlignment: MainAxisAlignment.spaceBetween,
89 90 children: [
90 91 HomeTabHeaderWidget(
  92 + themColor: bloc.modelData?.courseModuleThemeColor,
91 93 actionTap: (HeaderActionType type) {
92 94 _headerActionEvent(type);
93 95 },
94 96 ),
95 97 Expanded(
96 98 child: ListView.builder(
97   - itemCount: bloc.modelData?.totalCourseLesson,
  99 + itemCount: bloc.modelData?.totalCourseLesson??0,
98 100 scrollDirection: Axis.horizontal,
99 101 itemBuilder: (BuildContext context, int index) {
100 102 CourseCourseLessons? data = bloc.modelData?.courseLessons?[index];
... ... @@ -133,6 +135,7 @@ class _HomePageView extends StatelessWidget {
133 135 bloc.add(RequestVideoLessonEvent(data.id!,data.courseType!));
134 136 },
135 137 child: HomeVideoItem(
  138 + themColor: bloc.modelData?.courseModuleThemeColor,
136 139 lessons: data,
137 140 ),
138 141 );
... ... @@ -150,12 +153,12 @@ class _HomePageView extends StatelessWidget {
150 153 ),
151 154 Container(
152 155 decoration: BoxDecoration(
153   - color: Colors.blue,
  156 + color: HexColor(bloc.modelData?.courseModuleThemeColor??''),
154 157 borderRadius: BorderRadius.circular(14.5.r),
155 158 ),
156 159 padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 24.w),
157 160 child: Text(
158   - '${(bloc.modelData?.nowCourseLesson)}/${bloc.modelData?.totalCourseLesson}',
  161 + '${(bloc.modelData?.nowCourseLesson??0)}/${bloc.modelData?.totalCourseLesson??0}',
159 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 2 import 'package:flutter_screenutil/flutter_screenutil.dart';
3 3 import 'package:wow_english/common/core/user_util.dart';
4 4 import 'package:wow_english/common/extension/string_extension.dart';
  5 +import 'package:wow_english/utils/color_util.dart';
5 6 import 'package:wow_english/utils/image_util.dart';
6 7  
7 8 enum HeaderActionType {
... ... @@ -18,8 +19,9 @@ enum HeaderActionType {
18 19 }
19 20  
20 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 25 final Function(HeaderActionType type)? actionTap;
24 26  
25 27 @override
... ... @@ -27,7 +29,7 @@ class HomeTabHeaderWidget extends StatelessWidget {
27 29 return Container(
28 30 height: 45,
29 31 width: double.infinity,
30   - color: Colors.purple,
  32 + color: HexColor(themColor??''),
31 33 padding: EdgeInsets.symmetric(horizontal: 9.5.w),
32 34 child: Row(
33 35 children: [
... ...
lib/pages/home/widgets/home_vidoe_item.dart
... ... @@ -3,10 +3,12 @@ import &#39;package:flutter_screenutil/flutter_screenutil.dart&#39;;
3 3 import 'package:wow_english/common/extension/string_extension.dart';
4 4 import 'package:wow_english/common/widgets/ow_image_widget.dart';
5 5 import 'package:wow_english/models/course_entity.dart';
  6 +import 'package:wow_english/utils/color_util.dart';
6 7  
7 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 12 final CourseCourseLessons? lessons;
11 13  
12 14 @override
... ... @@ -46,6 +48,7 @@ class HomeVideoItem extends StatelessWidget {
46 48 width: 2,
47 49 color: const Color(0xFF140C10),
48 50 ),
  51 + color: HexColor(themColor??''),
49 52 borderRadius: BorderRadius.circular(6)
50 53 ),
51 54 padding: EdgeInsets.symmetric(horizontal: 10.w),
... ...
lib/pages/lessons/lesson_page.dart
... ... @@ -43,7 +43,7 @@ class _LessonPageView extends StatelessWidget {
43 43 appBar: WEAppBar(
44 44 leading: IconButton(
45 45 onPressed: (){
46   - Navigator.pop(context);
  46 + popPage();
47 47 },
48 48 icon: Image.asset(
49 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 3 import 'package:wow_english/common/extension/string_extension.dart';
4 4 import 'package:wow_english/common/widgets/ow_image_widget.dart';
5 5 import 'package:wow_english/models/course_module_entity.dart';
  6 +import 'package:wow_english/utils/color_util.dart';
6 7  
7 8 class LessonItemWidget extends StatelessWidget {
8 9 const LessonItemWidget({super.key, required this.isSelected, this.model, this.onClickEvent});
... ... @@ -59,7 +60,7 @@ class LessonItemWidget extends StatelessWidget {
59 60 10.verticalSpace,
60 61 Container(
61 62 decoration: BoxDecoration(
62   - color: Colors.red,
  63 + color: HexColor(model?.courseModuleThemeColor??'#FFC0C3E7'),
63 64 borderRadius: BorderRadius.circular(6.r),
64 65 border: Border.all(
65 66 color: const Color(0xFF333333),
... ...
lib/pages/user/information/user_information_page.dart
... ... @@ -40,12 +40,11 @@ class _UserInformationView extends StatelessWidget {
40 40 }
41 41  
42 42 class _UserInformationContentView extends StatelessWidget {
43   - const _UserInformationContentView({super.key});
44 43  
45 44 void _openModifyPage(BuildContext context, ModifyUserInformationType type) {
46 45 Log.d('_openModifyPage($type)');
47 46 // 暂时关闭修改,修复后打开
48   - //ModifyUserInformationPage.push(context, type);
  47 + // ModifyUserInformationPage.push(context, type);
49 48 }
50 49  
51 50 @override
... ...
lib/pages/user/modify/modify_user_information_page.dart
... ... @@ -79,7 +79,7 @@ class ModifyUserInformationPage extends StatelessWidget {
79 79 alignment: Alignment.center,
80 80 width: 90.w,
81 81 height: 44.h,
82   - decoration: BoxDecoration(
  82 + decoration: const BoxDecoration(
83 83 image: DecorationImage(image: AssetImage(AssetsConst.bgButtonBlue), fit: BoxFit.fill),
84 84 ),
85 85 child: Text(
... ... @@ -120,54 +120,9 @@ class ModifyUserInformationPage extends StatelessWidget {
120 120 if (type == ModifyUserInformationType.gender) {
121 121 return Row(
122 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 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 137 style: textStyle21sp,
138 138 ),
139 139 onPressed: () {
140   - Navigator.of(AppRouter.context).pushNamed(AppRouteName.userInformation);
  140 + pushNamed(AppRouteName.userInformation);
141 141 },
142 142 )
143 143 ],
144 144 ),
145 145 30.verticalSpace,
146 146 OutlinedButton(
147   - onPressed: () => Navigator.of(context).pushNamed(AppRouteName.fogPwd),
  147 + onPressed: () => pushNamed(AppRouteName.fogPwd),
148 148 style: normalButtonStyle,
149 149 child: Text(
150 150 "修改密码",
... ... @@ -153,7 +153,7 @@ class _UserView extends StatelessWidget {
153 153 ),
154 154 12.verticalSpace,
155 155 OutlinedButton(
156   - onPressed: () => Navigator.of(context).pushNamed(AppRouteName.exLesson),
  156 + onPressed: () => pushNamed(AppRouteName.exLesson),
157 157 style: normalButtonStyle,
158 158 child: Text(
159 159 "兑换课程",
... ... @@ -161,9 +161,8 @@ class _UserView extends StatelessWidget {
161 161 )),
162 162 12.verticalSpace,
163 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 167 style: normalButtonStyle,
169 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 18 \ No newline at end of file
... ...