bloc.dart 2.44 KB
import 'package:bloc/bloc.dart';
import 'package:wow_english/pages/unit/widget/home_tab_header_widget.dart';
import 'package:wow_english/utils/audio_player_util.dart';

import '../../common/request/dao/lesson_dao.dart';
import '../../common/request/exception.dart';
import '../../models/course_module_entity.dart';
import '../../models/course_unit_entity.dart';
import '../../route/route.dart';
import '../../utils/loading.dart';
import '../../utils/toast_util.dart';
import 'event.dart';
import 'state.dart';

class UnitBloc extends Bloc<UnitEvent, UnitState> {
  CourseModuleEntity? _moduleEntity;

  CourseModuleEntity? get moduleEntity => _moduleEntity;

  CourseUnitEntity? _unitData;

  CourseUnitEntity? get unitData => _unitData;

  bool exchangeResult = false;

  UnitBloc(CourseModuleEntity? courseEntity) : super(UnitState().init()) {
    on<RequestUnitDataEvent>(_requestUnitDatas);
    on<UnitInitEvent>((event, emit) {
      AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.inMyTummy);
    });
  }

  void _requestUnitDatas(
      RequestUnitDataEvent event, Emitter<UnitState> emitter) async {
    try {
      await loading(() async {
        _unitData = await LessonDao.courseUnit(event.moduleId);
        emitter(UnitDataLoadState());
      });
    } catch (e) {
      if (e is ApiException) {
        showToast(e.message ?? '请求失败,请检查网络连接');
      }
    }
  }

  String? getCourseModuleCode() {
    return _moduleEntity?.code ?? _unitData?.courseModuleCode;
  }

  void headerActionEvent(HeaderActionType type) {
    AudioPlayerUtil.getInstance().pause();
    if (type == HeaderActionType.video) {
      pushNamed(AppRouteName.reAfter);
    } else if (type == HeaderActionType.phase) {
      pushNamed(AppRouteName.courseModule).then((value) => {
            AudioPlayerUtil.getInstance()
                .playAudio(AudioPlayerUtilType.inMyTummy)
          });
      ;
    } else if (type == HeaderActionType.listen) {
      pushNamed(AppRouteName.listen).then((value) => {
            AudioPlayerUtil.getInstance()
                .playAudio(AudioPlayerUtilType.inMyTummy)
          });
    } else if (type == HeaderActionType.shop) {
      pushNamed(AppRouteName.shop).then((value) => {
            AudioPlayerUtil.getInstance()
                .playAudio(AudioPlayerUtilType.inMyTummy),
            exchangeResult = value['exchange']
          });
    } else if (type == HeaderActionType.user) {
      pushNamed(AppRouteName.user);
    }
  }
}