bloc.dart 1.73 KB
import 'package:bloc/bloc.dart';
import 'package:wow_english/pages/unit/widget/home_tab_header_widget.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;


  UnitBloc(CourseModuleEntity? courseEntity) : super(UnitState().init()) {
    on<RequestUnitDataEvent>(_requestData);
  }

  void _requestData(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) {
    if (type == HeaderActionType.video) {
      pushNamed(AppRouteName.reAfter);
    } else if (type == HeaderActionType.phase) {
      pushNamed(AppRouteName.courseModule);
    } else if (type == HeaderActionType.listen) {
      pushNamed(AppRouteName.listen);
    } else if (type == HeaderActionType.shop) {
      pushNamed(AppRouteName.shop);
    } else if (type == HeaderActionType.user) {
      pushNamed(AppRouteName.user);
    }
  }
}