bloc.dart 1.99 KB
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:wow_english/common/core/user_util.dart';
import 'package:wow_english/models/popup_entity.dart';
import 'package:wow_english/utils/audio_player_util.dart';

import '../../common/core/app_config_helper.dart';
import '../../common/request/dao/system_dao.dart';
import '../../models/app_version_entity.dart';
import '../../utils/log_util.dart';
import 'event.dart';
import 'state.dart';

class HomeBloc extends Bloc<HomeEvent, HomeState> {
  HomeBloc() : super(HomeState().init()) {
    on<InitEvent>(_init);
    on<ExchangeSuccessEvent>(_exchangeSuccess);
  }

  bool exchangeResult = false;

  void _init(InitEvent event, Emitter<HomeState> emit) async {
    if (UserUtil.isLogined()) {
      AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.touch);
    }
    await _checkUpdate(emit);
    await _getPopupInfo(emit);
  }

  void _exchangeSuccess(
      ExchangeSuccessEvent event, Emitter<HomeState> emit) async {
    if (exchangeResult) {
      emit(HomeState());
    }
  }

  Future<void> _checkUpdate(Emitter<HomeState> emit) async {
    if (AppConfigHelper.checkedUpdate) {
      return;
    }
    int localVersion = int.parse(await AppConfigHelper.getAppVersion());
    AppVersionEntity? appVersionEntity = await SystemDao.getVersionInfo();
    AppConfigHelper.checkedUpdate = true;
    if (appVersionEntity == null) {
      return;
    }
    Log.d(
        "HomeBloc _checkUpdate appVersionEntity: $appVersionEntity localVersion=$localVersion");
    if (localVersion < int.parse(appVersionEntity.version ?? '0')) {
      emit(UpdateDialogState(
          appVersionEntity.volType == UpdateStrategy.FORCE.name,
          appVersionEntity));
    }
  }

  Future<void> _getPopupInfo(Emitter<HomeState> emit) async {
    PopupEntity? popupEntity = await SystemDao.getPopupInfo();
    Log.d(
        "HomeBloc _getPopupInfo _getPopupInfo: $popupEntity");
    if (popupEntity == null) {
      return;
    }
    emit(PopupDialogState(popupEntity));
  }
}