Blame view

lib/pages/unit/bloc.dart 3.43 KB
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
1
  import 'package:bloc/bloc.dart';
2187c85f   吴启风   feat:课程结构调整
2
  import 'package:wow_english/pages/unit/widget/home_tab_header_widget.dart';
025d8543   biao   首页gametime播放修改
3
  import 'package:wow_english/utils/audio_player_util.dart';
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
4
  
42f15f6c   吴启风   feat:模块选择持久化&模块主题...
5
  import '../../common/core/module_cache.dart';
2187c85f   吴启风   feat:课程结构调整
6
  import '../../common/request/dao/lesson_dao.dart';
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
7
  import '../../common/request/exception.dart';
2187c85f   吴启风   feat:课程结构调整
8
  import '../../models/course_module_entity.dart';
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
9
  import '../../models/course_unit_entity.dart';
2187c85f   吴启风   feat:课程结构调整
10
  import '../../route/route.dart';
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
11
12
13
14
15
16
  import '../../utils/loading.dart';
  import '../../utils/toast_util.dart';
  import 'event.dart';
  import 'state.dart';
  
  class UnitBloc extends Bloc<UnitEvent, UnitState> {
2187c85f   吴启风   feat:课程结构调整
17
    CourseModuleEntity? _moduleEntity;
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
18
  
2187c85f   吴启风   feat:课程结构调整
19
    CourseModuleEntity? get moduleEntity => _moduleEntity;
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
20
  
2187c85f   吴启风   feat:课程结构调整
21
    CourseUnitEntity? _unitData;
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
22
  
2187c85f   吴启风   feat:课程结构调整
23
24
    CourseUnitEntity? get unitData => _unitData;
  
e6a08b82   biao   修复兑换之后回到首页不刷新问题;修...
25
    bool exchangeResult = false;
2187c85f   吴启风   feat:课程结构调整
26
27
  
    UnitBloc(CourseModuleEntity? courseEntity) : super(UnitState().init()) {
42f15f6c   吴启风   feat:模块选择持久化&模块主题...
28
29
      ///缓存当前模块信息
      setIfNotNull(courseEntity);
009cf00d   吴启风   feat:环节&单元解锁逻辑
30
      on<RequestUnitDataEvent>(_requestUnitDatas);
b1869cf8   biao   背景音乐添加
31
32
33
      on<UnitInitEvent>((event, emit) {
        AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.inMyTummy);
      });
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
34
35
    }
  
e6a08b82   biao   修复兑换之后回到首页不刷新问题;修...
36
37
    void _requestUnitDatas(
        RequestUnitDataEvent event, Emitter<UnitState> emitter) async {
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
38
39
      try {
        await loading(() async {
2187c85f   吴启风   feat:课程结构调整
40
          _unitData = await LessonDao.courseUnit(event.moduleId);
42f15f6c   吴启风   feat:模块选择持久化&模块主题...
41
          setIfNull(_unitData);
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
42
43
44
45
46
47
48
49
          emitter(UnitDataLoadState());
        });
      } catch (e) {
        if (e is ApiException) {
          showToast(e.message ?? '请求失败,请检查网络连接');
        }
      }
    }
2187c85f   吴启风   feat:课程结构调整
50
  
42f15f6c   吴启风   feat:模块选择持久化&模块主题...
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
    ///如果从模块页选择回来,则刷新缓存,否则认为是从
    void setIfNotNull(CourseModuleEntity? courseModuleEntity) {
      if (courseModuleEntity != null) {
        _moduleEntity = courseModuleEntity;
      } else {
        _moduleEntity = ModuleCache.instance.currentModule;
      }
    }
  
    ///理论上只有没有缓存的情况下首次进入单元列表,数据请求成功后构建第一次缓存
    void setIfNull(CourseUnitEntity? courseUnitData) {
      if (_moduleEntity == null && courseUnitData != null) {
        _moduleEntity = CourseModuleEntity.of(
            courseUnitData.nowCourseModuleId,
            courseUnitData.courseModuleCode,
            courseUnitData.nowCourseModuleName,
            courseUnitData.courseModuleThemeColor);
        ModuleCache.instance.currentModule = _moduleEntity;
      }
    }
  
2187c85f   吴启风   feat:课程结构调整
72
73
74
75
    String? getCourseModuleCode() {
      return _moduleEntity?.code ?? _unitData?.courseModuleCode;
    }
  
2d1ead53   吴启风   feat:背景音播放优化
76
77
    Future<void> headerActionEvent(HeaderActionType type) async {
      await AudioPlayerUtil.getInstance().pause();
2187c85f   吴启风   feat:课程结构调整
78
      if (type == HeaderActionType.video) {
2d1ead53   吴启风   feat:背景音播放优化
79
        //视频跟读暂时隐藏了
2187c85f   吴启风   feat:课程结构调整
80
81
        pushNamed(AppRouteName.reAfter);
      } else if (type == HeaderActionType.phase) {
b1869cf8   biao   背景音乐添加
82
83
84
85
86
        pushNamed(AppRouteName.courseModule).then((value) => {
              AudioPlayerUtil.getInstance()
                  .playAudio(AudioPlayerUtilType.inMyTummy)
            });
        ;
2187c85f   吴启风   feat:课程结构调整
87
      } else if (type == HeaderActionType.listen) {
b1869cf8   biao   背景音乐添加
88
89
90
91
        pushNamed(AppRouteName.listen).then((value) => {
              AudioPlayerUtil.getInstance()
                  .playAudio(AudioPlayerUtilType.inMyTummy)
            });
2187c85f   吴启风   feat:课程结构调整
92
      } else if (type == HeaderActionType.shop) {
b1869cf8   biao   背景音乐添加
93
94
95
96
97
        pushNamed(AppRouteName.shop).then((value) => {
              AudioPlayerUtil.getInstance()
                  .playAudio(AudioPlayerUtilType.inMyTummy),
              exchangeResult = value['exchange']
            });
2187c85f   吴启风   feat:课程结构调整
98
99
100
101
      } else if (type == HeaderActionType.user) {
        pushNamed(AppRouteName.user);
      }
    }
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
102
  }