module_bloc.dart 1.55 KB
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:wow_english/common/request/dao/lesson_dao.dart';
import 'package:wow_english/common/request/exception.dart';
import 'package:wow_english/models/course_module_entity.dart';
import 'package:wow_english/utils/loading.dart';
import 'package:wow_english/utils/toast_util.dart';

part 'module_event.dart';
part 'module_state.dart';

class ModuleBloc extends Bloc<ModuleEvent, ModuleState> {
  final int pageIndex;

  final PageController pageController;

  int _currentPageIndex = 0;

  int get currentPageIndex => _currentPageIndex;

  List<CourseModuleEntity?> _listData = [];

  List<CourseModuleEntity?> get listData => _listData;

  ModuleBloc(this.pageIndex, this.pageController) : super(ModuleInitial()) {
    _currentPageIndex = pageIndex;
    on<PageViewChangeIndexEvent>(_pageIndexChange);
    on<RequestDataEvent>(_requestData);
  }

  void _pageIndexChange(PageViewChangeIndexEvent event, Emitter<ModuleState> emitter) async {
    _currentPageIndex = event.index;
    emitter(PageIndexChangeState());
  }

  void _requestData(RequestDataEvent event, Emitter<ModuleState> emitter) async {
    try {
      await loading(() async {
        _listData = await LessonDao.courseModule() ?? [];
        emitter(ModuleDataLoadState());
      });
    } catch (e) {
      if (e is ApiException) {
        showToast(e.message ?? '请求失败,请检查网络连接');
      }
    }
  }

  @override
  Future<void> close() {
    pageController.dispose();
    return super.close();
  }
}