Commit 0cbdbb3480bd41cd223ef9fbc64649dcb0f718c1
1 parent
009cf00d
feat:环节列表页返回单元列表页是增加刷新逻辑
Showing
4 changed files
with
34 additions
and
10 deletions
lib/pages/section/bloc/section_bloc.dart
| @@ -40,6 +40,9 @@ class SectionBloc extends Bloc<SectionEvent, SectionState> { | @@ -40,6 +40,9 @@ class SectionBloc extends Bloc<SectionEvent, SectionState> { | ||
| 40 | 40 | ||
| 41 | CourseUnitEntity get courseUnitEntity => _courseUnitEntity; | 41 | CourseUnitEntity get courseUnitEntity => _courseUnitEntity; |
| 42 | 42 | ||
| 43 | + ///单元列表是否有刷新,有的话返回上一页时通知其刷新接口数据 | ||
| 44 | + bool courseUnitEntityChanged = false; | ||
| 45 | + | ||
| 43 | ///courseUnitId与课程环节列表的映射 | 46 | ///courseUnitId与课程环节列表的映射 |
| 44 | final Map<int, List<CourseSectionEntity>?> _courseSectionDatasMap = {}; | 47 | final Map<int, List<CourseSectionEntity>?> _courseSectionDatasMap = {}; |
| 45 | 48 | ||
| @@ -154,10 +157,11 @@ class SectionBloc extends Bloc<SectionEvent, SectionState> { | @@ -154,10 +157,11 @@ class SectionBloc extends Bloc<SectionEvent, SectionState> { | ||
| 154 | 157 | ||
| 155 | ///未锁定的页(单元)数 | 158 | ///未锁定的页(单元)数 |
| 156 | int unlockPageCount() { | 159 | int unlockPageCount() { |
| 157 | - return _courseUnitEntity.courseUnitVOList | ||
| 158 | - ?.indexWhereOrNull((element) => element.lock == true) ?? | ||
| 159 | - _courseUnitEntity.courseUnitVOList?.length ?? | ||
| 160 | - 0; | 160 | + // return _courseUnitEntity.courseUnitVOList |
| 161 | + // ?.indexWhereOrNull((element) => element.lock == true) ?? | ||
| 162 | + // _courseUnitEntity.courseUnitVOList?.length ?? | ||
| 163 | + // 0; | ||
| 164 | + return _courseUnitEntity.courseUnitVOList?.length ?? 0; | ||
| 161 | } | 165 | } |
| 162 | 166 | ||
| 163 | ///当前页的课程详情 | 167 | ///当前页的课程详情 |
| @@ -278,6 +282,7 @@ class SectionBloc extends Bloc<SectionEvent, SectionState> { | @@ -278,6 +282,7 @@ class SectionBloc extends Bloc<SectionEvent, SectionState> { | ||
| 278 | if (nextCourseUnitDetail?.lock == false) { | 282 | if (nextCourseUnitDetail?.lock == false) { |
| 279 | ///解锁状态从锁定到解锁,覆盖原unit数据并刷新ui | 283 | ///解锁状态从锁定到解锁,覆盖原unit数据并刷新ui |
| 280 | _courseUnitEntity = newCourseUnitEntity!; | 284 | _courseUnitEntity = newCourseUnitEntity!; |
| 285 | + courseUnitEntityChanged = true; | ||
| 281 | emitter(LessonDataLoadState()); | 286 | emitter(LessonDataLoadState()); |
| 282 | 287 | ||
| 283 | return checkCourseSectionLockedOfNextUnit(courseLessonId, nextCourseUnitDetail!.id!, emitter); | 288 | return checkCourseSectionLockedOfNextUnit(courseLessonId, nextCourseUnitDetail!.id!, emitter); |
lib/pages/section/section_page.dart
| @@ -38,9 +38,9 @@ class SectionPage extends StatelessWidget { | @@ -38,9 +38,9 @@ class SectionPage extends StatelessWidget { | ||
| 38 | initialPage, | 38 | initialPage, |
| 39 | PageController(initialPage: initialPage), | 39 | PageController(initialPage: initialPage), |
| 40 | ScrollController(), | 40 | ScrollController(), |
| 41 | - ScrollController()) | 41 | + ScrollController()), |
| 42 | //为了触发指示器进入后计算位置 | 42 | //为了触发指示器进入后计算位置 |
| 43 | - ..add(CurrentUnitIndexChangeEvent(initialPage)), | 43 | + // ..add(CurrentUnitIndexChangeEvent(initialPage)), |
| 44 | child: _SectionPageView(context), | 44 | child: _SectionPageView(context), |
| 45 | ); | 45 | ); |
| 46 | } | 46 | } |
| @@ -152,7 +152,12 @@ class _SectionPageView extends StatelessWidget { | @@ -152,7 +152,12 @@ class _SectionPageView extends StatelessWidget { | ||
| 152 | children: [ | 152 | children: [ |
| 153 | SectionHeaderWidget( | 153 | SectionHeaderWidget( |
| 154 | title: bloc.getCourseUnitDetail().name, | 154 | title: bloc.getCourseUnitDetail().name, |
| 155 | - courseModuleCode: bloc.courseUnitEntity.courseModuleCode), | 155 | + courseModuleCode: bloc.courseUnitEntity.courseModuleCode, |
| 156 | + onBack: () { | ||
| 157 | + popPage(data: { | ||
| 158 | + 'needRefresh': bloc.courseUnitEntityChanged, | ||
| 159 | + }); | ||
| 160 | + }), | ||
| 156 | Expanded( | 161 | Expanded( |
| 157 | child: Padding( | 162 | child: Padding( |
| 158 | padding: EdgeInsets.symmetric(horizontal: 10.w), | 163 | padding: EdgeInsets.symmetric(horizontal: 10.w), |
lib/pages/section/widgets/section_header_widget.dart
| @@ -7,12 +7,14 @@ import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | @@ -7,12 +7,14 @@ import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | ||
| 7 | import '../courese_module_model.dart'; | 7 | import '../courese_module_model.dart'; |
| 8 | 8 | ||
| 9 | class SectionHeaderWidget extends StatelessWidget { | 9 | class SectionHeaderWidget extends StatelessWidget { |
| 10 | - const SectionHeaderWidget({super.key, this.title, this.courseModuleCode}); | 10 | + const SectionHeaderWidget({super.key, this.title, this.courseModuleCode, this.onBack}); |
| 11 | 11 | ||
| 12 | final String? title; | 12 | final String? title; |
| 13 | 13 | ||
| 14 | final String? courseModuleCode; | 14 | final String? courseModuleCode; |
| 15 | 15 | ||
| 16 | + final VoidCallback? onBack; | ||
| 17 | + | ||
| 16 | @override | 18 | @override |
| 17 | Widget build(BuildContext context) { | 19 | Widget build(BuildContext context) { |
| 18 | return BlocBuilder<UserBloc, UserState>( | 20 | return BlocBuilder<UserBloc, UserState>( |
| @@ -27,7 +29,11 @@ class SectionHeaderWidget extends StatelessWidget { | @@ -27,7 +29,11 @@ class SectionHeaderWidget extends StatelessWidget { | ||
| 27 | ScreenUtil().bottomBarHeight.horizontalSpace, | 29 | ScreenUtil().bottomBarHeight.horizontalSpace, |
| 28 | GestureDetector( | 30 | GestureDetector( |
| 29 | onTap: () { | 31 | onTap: () { |
| 30 | - Navigator.pop(context); | 32 | + if (onBack == null) { |
| 33 | + Navigator.pop(context); | ||
| 34 | + } else { | ||
| 35 | + onBack!(); | ||
| 36 | + } | ||
| 31 | }, | 37 | }, |
| 32 | child: Container( | 38 | child: Container( |
| 33 | alignment: Alignment.center, | 39 | alignment: Alignment.center, |
lib/pages/unit/view.dart
| @@ -65,7 +65,15 @@ class UnitPage extends StatelessWidget { | @@ -65,7 +65,15 @@ class UnitPage extends StatelessWidget { | ||
| 65 | arguments: { | 65 | arguments: { |
| 66 | 'courseUnitEntity': bloc.unitData, | 66 | 'courseUnitEntity': bloc.unitData, |
| 67 | 'courseUnitId': data.id | 67 | 'courseUnitId': data.id |
| 68 | - }); | 68 | + }).then((value) { |
| 69 | + if (value != null) { | ||
| 70 | + Map<String, dynamic> dataMap = value as Map<String, dynamic>; | ||
| 71 | + bool needRefresh = dataMap['needRefresh']; | ||
| 72 | + if (needRefresh) { | ||
| 73 | + bloc.add(RequestUnitDataEvent(courseModuleEntity?.id)); | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + }); | ||
| 69 | }, | 77 | }, |
| 70 | child: CourseUnitItem( | 78 | child: CourseUnitItem( |
| 71 | unitEntity: bloc.unitData!, | 79 | unitEntity: bloc.unitData!, |