diff --git a/lib/generated/json/course_entity.g.dart b/lib/generated/json/course_entity.g.dart index 31295b0..8ec0d62 100644 --- a/lib/generated/json/course_entity.g.dart +++ b/lib/generated/json/course_entity.g.dart @@ -23,6 +23,10 @@ CourseEntity $CourseEntityFromJson(Map json) { if (totalCourseLesson != null) { courseEntity.totalCourseLesson = totalCourseLesson; } + final String? courseModuleThemeColor = jsonConvert.convert(json['courseModuleThemeColor']); + if (courseModuleThemeColor != null) { + courseEntity.courseModuleThemeColor = courseModuleThemeColor; + } return courseEntity; } @@ -33,6 +37,7 @@ Map $CourseEntityToJson(CourseEntity entity) { data['nowCourseModuleId'] = entity.nowCourseModuleId; data['nowCourseModuleName'] = entity.nowCourseModuleName; data['totalCourseLesson'] = entity.totalCourseLesson; + data['courseModuleThemeColor'] = entity.courseModuleThemeColor; return data; } @@ -86,10 +91,6 @@ CourseCourseLessons $CourseCourseLessonsFromJson(Map json) { if (status != null) { courseCourseLessons.status = status; } - final String? courseModuleThemeColor = jsonConvert.convert(json['courseModuleThemeColor']); - if (courseModuleThemeColor != null) { - courseCourseLessons.courseModuleThemeColor = courseModuleThemeColor; - } return courseCourseLessons; } @@ -107,6 +108,5 @@ Map $CourseCourseLessonsToJson(CourseCourseLessons entity) { data['name'] = entity.name; data['sortOrder'] = entity.sortOrder; data['status'] = entity.status; - data['courseModuleThemeColor'] = entity.courseModuleThemeColor; return data; } \ No newline at end of file diff --git a/lib/generated/json/course_module_entity.g.dart b/lib/generated/json/course_module_entity.g.dart index cf8bb40..1d091a6 100644 --- a/lib/generated/json/course_module_entity.g.dart +++ b/lib/generated/json/course_module_entity.g.dart @@ -59,6 +59,11 @@ CourseModuleEntity $CourseModuleEntityFromJson(Map json) { if (status != null) { courseModuleEntity.status = status; } + + final String? courseModuleThemeColor = jsonConvert.convert(json['courseModuleThemeColor']); + if (courseModuleThemeColor != null) { + courseModuleEntity.courseModuleThemeColor = courseModuleThemeColor; + } return courseModuleEntity; } @@ -78,5 +83,6 @@ Map $CourseModuleEntityToJson(CourseModuleEntity entity) { data['picUrl'] = entity.picUrl; data['sortOrder'] = entity.sortOrder; data['status'] = entity.status; + data['courseModuleThemeColor'] = entity.courseModuleThemeColor; return data; } \ No newline at end of file diff --git a/lib/models/course_entity.dart b/lib/models/course_entity.dart index 52109ac..a0b3be0 100644 --- a/lib/models/course_entity.dart +++ b/lib/models/course_entity.dart @@ -9,6 +9,7 @@ class CourseEntity { int? nowCourseModuleId; String? nowCourseModuleName; int? totalCourseLesson; + String? courseModuleThemeColor; CourseEntity(); @@ -36,7 +37,6 @@ class CourseCourseLessons { String? name; int? sortOrder; int? status; - String? courseModuleThemeColor; CourseCourseLessons(); diff --git a/lib/models/course_module_entity.dart b/lib/models/course_module_entity.dart index a028aa4..d3963c2 100644 --- a/lib/models/course_module_entity.dart +++ b/lib/models/course_module_entity.dart @@ -19,6 +19,7 @@ class CourseModuleEntity { String? picUrl; int? sortOrder; int? status; + String? courseModuleThemeColor; CourseModuleEntity(); diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index cc579a2..aa8d36e 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -8,6 +8,7 @@ import 'package:wow_english/pages/home/widgets/home_bouns_item.dart'; import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart'; import 'package:wow_english/pages/home/widgets/home_vidoe_item.dart'; import 'package:wow_english/route/route.dart'; +import 'package:wow_english/utils/color_util.dart'; import 'package:wow_english/utils/toast_util.dart'; import 'bloc/home_bloc.dart'; @@ -88,13 +89,14 @@ class _HomePageView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ HomeTabHeaderWidget( + themColor: bloc.modelData?.courseModuleThemeColor, actionTap: (HeaderActionType type) { _headerActionEvent(type); }, ), Expanded( child: ListView.builder( - itemCount: bloc.modelData?.totalCourseLesson, + itemCount: bloc.modelData?.totalCourseLesson??0, scrollDirection: Axis.horizontal, itemBuilder: (BuildContext context, int index) { CourseCourseLessons? data = bloc.modelData?.courseLessons?[index]; @@ -133,6 +135,7 @@ class _HomePageView extends StatelessWidget { bloc.add(RequestVideoLessonEvent(data.id!,data.courseType!)); }, child: HomeVideoItem( + themColor: bloc.modelData?.courseModuleThemeColor, lessons: data, ), ); @@ -150,12 +153,12 @@ class _HomePageView extends StatelessWidget { ), Container( decoration: BoxDecoration( - color: Colors.blue, + color: HexColor(bloc.modelData?.courseModuleThemeColor??''), borderRadius: BorderRadius.circular(14.5.r), ), padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 24.w), child: Text( - '${(bloc.modelData?.nowCourseLesson)}/${bloc.modelData?.totalCourseLesson}', + '${(bloc.modelData?.nowCourseLesson??0)}/${bloc.modelData?.totalCourseLesson??0}', style: TextStyle(color: Colors.white, fontSize: 12.sp), ), ), diff --git a/lib/pages/home/widgets/home_tab_header_widget.dart b/lib/pages/home/widgets/home_tab_header_widget.dart index 6cb97d4..1a63632 100644 --- a/lib/pages/home/widgets/home_tab_header_widget.dart +++ b/lib/pages/home/widgets/home_tab_header_widget.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/extension/string_extension.dart'; +import 'package:wow_english/utils/color_util.dart'; import 'package:wow_english/utils/image_util.dart'; enum HeaderActionType { @@ -18,8 +19,9 @@ enum HeaderActionType { } class HomeTabHeaderWidget extends StatelessWidget { - const HomeTabHeaderWidget({super.key, this.actionTap}); + const HomeTabHeaderWidget({super.key, this.actionTap, this.themColor}); + final String? themColor; final Function(HeaderActionType type)? actionTap; @override @@ -27,7 +29,7 @@ class HomeTabHeaderWidget extends StatelessWidget { return Container( height: 45, width: double.infinity, - color: Colors.purple, + color: HexColor(themColor??''), padding: EdgeInsets.symmetric(horizontal: 9.5.w), child: Row( children: [ diff --git a/lib/pages/home/widgets/home_vidoe_item.dart b/lib/pages/home/widgets/home_vidoe_item.dart index b046154..10769d1 100644 --- a/lib/pages/home/widgets/home_vidoe_item.dart +++ b/lib/pages/home/widgets/home_vidoe_item.dart @@ -3,10 +3,12 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/widgets/ow_image_widget.dart'; import 'package:wow_english/models/course_entity.dart'; +import 'package:wow_english/utils/color_util.dart'; class HomeVideoItem extends StatelessWidget { - const HomeVideoItem({super.key, this.lessons}); + const HomeVideoItem({super.key, this.lessons, this.themColor}); + final String? themColor; final CourseCourseLessons? lessons; @override @@ -46,6 +48,7 @@ class HomeVideoItem extends StatelessWidget { width: 2, color: const Color(0xFF140C10), ), + color: HexColor(themColor??''), borderRadius: BorderRadius.circular(6) ), padding: EdgeInsets.symmetric(horizontal: 10.w), diff --git a/lib/pages/lessons/lesson_page.dart b/lib/pages/lessons/lesson_page.dart index 41479e1..495e7ba 100644 --- a/lib/pages/lessons/lesson_page.dart +++ b/lib/pages/lessons/lesson_page.dart @@ -43,7 +43,7 @@ class _LessonPageView extends StatelessWidget { appBar: WEAppBar( leading: IconButton( onPressed: (){ - Navigator.pop(context); + popPage(); }, icon: Image.asset( 'back'.assetPng, diff --git a/lib/pages/lessons/widgets/lesson_item_widget.dart b/lib/pages/lessons/widgets/lesson_item_widget.dart index 2339bfc..951303b 100644 --- a/lib/pages/lessons/widgets/lesson_item_widget.dart +++ b/lib/pages/lessons/widgets/lesson_item_widget.dart @@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/widgets/ow_image_widget.dart'; import 'package:wow_english/models/course_module_entity.dart'; +import 'package:wow_english/utils/color_util.dart'; class LessonItemWidget extends StatelessWidget { const LessonItemWidget({super.key, required this.isSelected, this.model, this.onClickEvent}); @@ -59,7 +60,7 @@ class LessonItemWidget extends StatelessWidget { 10.verticalSpace, Container( decoration: BoxDecoration( - color: Colors.red, + color: HexColor(model?.courseModuleThemeColor??'#FFC0C3E7'), borderRadius: BorderRadius.circular(6.r), border: Border.all( color: const Color(0xFF333333), diff --git a/lib/pages/user/information/user_information_page.dart b/lib/pages/user/information/user_information_page.dart index b2cc57f..febee7c 100644 --- a/lib/pages/user/information/user_information_page.dart +++ b/lib/pages/user/information/user_information_page.dart @@ -40,12 +40,11 @@ class _UserInformationView extends StatelessWidget { } class _UserInformationContentView extends StatelessWidget { - const _UserInformationContentView({super.key}); void _openModifyPage(BuildContext context, ModifyUserInformationType type) { Log.d('_openModifyPage($type)'); // 暂时关闭修改,修复后打开 - //ModifyUserInformationPage.push(context, type); + // ModifyUserInformationPage.push(context, type); } @override diff --git a/lib/pages/user/modify/modify_user_information_page.dart b/lib/pages/user/modify/modify_user_information_page.dart index 5ccc0c4..277aa35 100644 --- a/lib/pages/user/modify/modify_user_information_page.dart +++ b/lib/pages/user/modify/modify_user_information_page.dart @@ -79,7 +79,7 @@ class ModifyUserInformationPage extends StatelessWidget { alignment: Alignment.center, width: 90.w, height: 44.h, - decoration: BoxDecoration( + decoration: const BoxDecoration( image: DecorationImage(image: AssetImage(AssetsConst.bgButtonBlue), fit: BoxFit.fill), ), child: Text( @@ -120,54 +120,9 @@ class ModifyUserInformationPage extends StatelessWidget { if (type == ModifyUserInformationType.gender) { return Row( children: [ - SizedBox( - width: 100.w, - child: RadioListTile( - title: Text( - '男', - style: TextStyle( - fontWeight: FontWeight.w700, - color: const Color(0xFF333333), - fontSize: 21.sp, - ), - ), - activeColor: const Color(0xFF0E89BA), - value: 0, - //selected: user.gender == 0, - groupValue: userBloc.tempGender, - onChanged: (value) { - Log.d('男value = $value'); - if (value != null) { - userBloc.tempGender = value; - } - userBloc.add(UserUIUpdate(type)); - }, - ), - ), - SizedBox( - width: 100.w, - child: RadioListTile( - //selected: user.gender == 1, - title: Text( - '女', - style: TextStyle( - fontWeight: FontWeight.w700, - color: const Color(0xFF333333), - fontSize: 21.sp, - ), - ), - activeColor: const Color(0xFF0E89BA), - value: 1, - groupValue: userBloc.tempGender, - onChanged: (int? value) { - Log.d('女value = $value'); - if (value != null) { - userBloc.tempGender = value; - } - userBloc.add(UserUIUpdate(type)); - }, - ), - ), + _buildSexWidget('男', true), + 70.horizontalSpace, + _buildSexWidget('女', false) ], ); } @@ -203,4 +158,34 @@ class ModifyUserInformationPage extends StatelessWidget { },*/ ); } + + Widget _buildSexWidget(String title,bool isSelect) { + return Row( + children: [ + Container( + width: 21.h, + height: 21.h, + padding: EdgeInsets.all(4.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(21.r), + border: Border.all( + color: const Color(0xFF140C10), + width: 1.5 + ) + ), + child: Offstage( + offstage:!isSelect, + child: ClipRRect( + borderRadius: BorderRadius.circular(13.r), + child: Container( + color: Colors.blue, + ), + ), + ), + ), + 5.horizontalSpace, + Text(title) + ], + ); + } } diff --git a/lib/pages/user/user_page.dart b/lib/pages/user/user_page.dart index 90ec0e0..7c67d78 100644 --- a/lib/pages/user/user_page.dart +++ b/lib/pages/user/user_page.dart @@ -137,14 +137,14 @@ class _UserView extends StatelessWidget { style: textStyle21sp, ), onPressed: () { - Navigator.of(AppRouter.context).pushNamed(AppRouteName.userInformation); + pushNamed(AppRouteName.userInformation); }, ) ], ), 30.verticalSpace, OutlinedButton( - onPressed: () => Navigator.of(context).pushNamed(AppRouteName.fogPwd), + onPressed: () => pushNamed(AppRouteName.fogPwd), style: normalButtonStyle, child: Text( "修改密码", @@ -153,7 +153,7 @@ class _UserView extends StatelessWidget { ), 12.verticalSpace, OutlinedButton( - onPressed: () => Navigator.of(context).pushNamed(AppRouteName.exLesson), + onPressed: () => pushNamed(AppRouteName.exLesson), style: normalButtonStyle, child: Text( "兑换课程", @@ -161,9 +161,8 @@ class _UserView extends StatelessWidget { )), 12.verticalSpace, OutlinedButton( - onPressed: () => { - Navigator.of(context).pushNamed(AppRouteName.webView, - arguments: {'urlStr': AppConsts.userPrivacyPolicyUrl, 'webViewTitle': '隐私协议'}) + onPressed: () { + pushNamed(AppRouteName.webView,arguments: {'urlStr': AppConsts.userPrivacyPolicyUrl, 'webViewTitle': '隐私协议'}); }, style: normalButtonStyle, child: Text( diff --git a/lib/utils/color_util.dart b/lib/utils/color_util.dart new file mode 100644 index 0000000..3d2a94d --- /dev/null +++ b/lib/utils/color_util.dart @@ -0,0 +1,17 @@ +import 'dart:ui'; + +class HexColor extends Color { + static int _getColorFromHex(String hexColor) { + if (hexColor.isEmpty) { + hexColor = '#FFC0C3E7'; + } + hexColor = hexColor.toUpperCase().replaceAll("#", ""); + hexColor = hexColor.replaceAll('0X', ''); + if (hexColor.length == 6) { + hexColor = "FF$hexColor"; + } + return int.parse(hexColor, radix: 16); + } + + HexColor(final String hexColor) : super(_getColorFromHex(hexColor)); +} \ No newline at end of file