Commit 37063ced5d50765d55c4414cd225d45ba8ff0c22
1 parent
7b87c05c
feat:阶段选择指示器与阶段色联动;阶段选择点击增加音效(音频文件待提供)
Showing
4 changed files
with
27 additions
and
9 deletions
lib/common/utils/click_with_music_controller.dart
| @@ -17,8 +17,9 @@ class ClickWithMusicController { | @@ -17,8 +17,9 @@ class ClickWithMusicController { | ||
| 17 | 17 | ||
| 18 | bool _isPlaying = false; | 18 | bool _isPlaying = false; |
| 19 | 19 | ||
| 20 | + ///@param context 暂时没用到,先可空预留 | ||
| 20 | ///@param action 可以是同步函数也可以是异步函数 | 21 | ///@param action 可以是同步函数也可以是异步函数 |
| 21 | - Future<void> playMusicAndPerformAction(BuildContext context, | 22 | + Future<void> playMusicAndPerformAction(BuildContext? context, |
| 22 | AudioPlayerUtilType audioType, FutureOr<void> Function() action) async { | 23 | AudioPlayerUtilType audioType, FutureOr<void> Function() action) async { |
| 23 | if (_isPlaying) return; | 24 | if (_isPlaying) return; |
| 24 | 25 |
lib/pages/module/course_module_page.dart
| @@ -5,6 +5,9 @@ import 'package:wow_english/common/widgets/we_app_bar.dart'; | @@ -5,6 +5,9 @@ import 'package:wow_english/common/widgets/we_app_bar.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/route/route.dart'; | 6 | import 'package:wow_english/route/route.dart'; |
| 7 | 7 | ||
| 8 | +import '../../common/utils/click_with_music_controller.dart'; | ||
| 9 | +import '../../utils/audio_player_util.dart'; | ||
| 10 | +import '../section/courese_module_model.dart'; | ||
| 8 | import 'bloc/module_bloc.dart'; | 11 | import 'bloc/module_bloc.dart'; |
| 9 | import 'widgets/module_item_widget.dart'; | 12 | import 'widgets/module_item_widget.dart'; |
| 10 | 13 | ||
| @@ -67,6 +70,7 @@ class _LessonPageView extends StatelessWidget { | @@ -67,6 +70,7 @@ class _LessonPageView extends StatelessWidget { | ||
| 67 | itemCount: bloc.listData.length, | 70 | itemCount: bloc.listData.length, |
| 68 | scrollDirection: Axis.horizontal, | 71 | scrollDirection: Axis.horizontal, |
| 69 | itemBuilder: (BuildContext context, int index) { | 72 | itemBuilder: (BuildContext context, int index) { |
| 73 | + CourseModuleEntity? model = bloc.listData[index]; | ||
| 70 | return Container( | 74 | return Container( |
| 71 | height: 32.h, | 75 | height: 32.h, |
| 72 | width: 66.w, | 76 | width: 66.w, |
| @@ -86,9 +90,16 @@ class _LessonPageView extends StatelessWidget { | @@ -86,9 +90,16 @@ class _LessonPageView extends StatelessWidget { | ||
| 86 | child: Container( | 90 | child: Container( |
| 87 | height: bloc.currentPageIndex == index ? 32 : 20, | 91 | height: bloc.currentPageIndex == index ? 32 : 20, |
| 88 | decoration: BoxDecoration( | 92 | decoration: BoxDecoration( |
| 89 | - color: bloc.currentPageIndex == index | ||
| 90 | - ? Colors.red | ||
| 91 | - : Colors.white, | 93 | + // color: bloc.currentPageIndex == index |
| 94 | + // ? Colors.red | ||
| 95 | + // : Colors.white, | ||
| 96 | + color: | ||
| 97 | + CourseModuleModel(model?.code ?? 'Phase-1') | ||
| 98 | + .color | ||
| 99 | + .withOpacity( | ||
| 100 | + bloc.currentPageIndex == index | ||
| 101 | + ? 1 | ||
| 102 | + : 0.35), | ||
| 92 | borderRadius: BorderRadius.circular(5.r), | 103 | borderRadius: BorderRadius.circular(5.r), |
| 93 | border: Border.all( | 104 | border: Border.all( |
| 94 | width: 0.5, | 105 | width: 0.5, |
| @@ -156,9 +167,13 @@ class _LessonPageView extends StatelessWidget { | @@ -156,9 +167,13 @@ class _LessonPageView extends StatelessWidget { | ||
| 156 | model: model, | 167 | model: model, |
| 157 | isSelected: bloc.currentPageIndex == index, | 168 | isSelected: bloc.currentPageIndex == index, |
| 158 | onClickEvent: () { | 169 | onClickEvent: () { |
| 159 | - pushNamedAndRemoveUntil( | ||
| 160 | - AppRouteName.courseUnit, (route) => route.isFirst, | ||
| 161 | - arguments: {'courseModuleEntity': model}); | 170 | + ///todo 不同阶段音乐文件待提供 |
| 171 | + ClickWithMusicController.instance.playMusicAndPerformAction( | ||
| 172 | + context, | ||
| 173 | + AudioPlayerUtilType.welcomeToWow, | ||
| 174 | + () => pushNamedAndRemoveUntil( | ||
| 175 | + AppRouteName.courseUnit, (route) => route.isFirst, | ||
| 176 | + arguments: {'courseModuleEntity': model})); | ||
| 162 | }, | 177 | }, |
| 163 | ), | 178 | ), |
| 164 | ), | 179 | ), |
lib/pages/section/section_page.dart
| @@ -19,7 +19,7 @@ import '../../utils/log_util.dart'; | @@ -19,7 +19,7 @@ import '../../utils/log_util.dart'; | ||
| 19 | import 'bloc/section_bloc.dart'; | 19 | import 'bloc/section_bloc.dart'; |
| 20 | import 'courese_module_model.dart'; | 20 | import 'courese_module_model.dart'; |
| 21 | 21 | ||
| 22 | -/// 环节列表页 | 22 | +/// 环节(课程)列表页 |
| 23 | class SectionPage extends StatelessWidget { | 23 | class SectionPage extends StatelessWidget { |
| 24 | const SectionPage( | 24 | const SectionPage( |
| 25 | {super.key, required this.courseUnitEntity, required this.courseUnitId}); | 25 | {super.key, required this.courseUnitEntity, required this.courseUnitId}); |
lib/pages/section/widgets/section_header_widget.dart
| @@ -6,8 +6,10 @@ import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | @@ -6,8 +6,10 @@ import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | ||
| 6 | 6 | ||
| 7 | import '../courese_module_model.dart'; | 7 | import '../courese_module_model.dart'; |
| 8 | 8 | ||
| 9 | +/// 环节(课程)列表页标题栏 | ||
| 9 | class SectionHeaderWidget extends StatelessWidget { | 10 | class SectionHeaderWidget extends StatelessWidget { |
| 10 | - const SectionHeaderWidget({super.key, this.title, this.courseModuleCode, this.onBack}); | 11 | + const SectionHeaderWidget( |
| 12 | + {super.key, this.title, this.courseModuleCode, this.onBack}); | ||
| 11 | 13 | ||
| 12 | final String? title; | 14 | final String? title; |
| 13 | 15 |