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

import 'package:bloc/bloc.dart';
import 'package:wow_english/common/core/user_util.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()) {
      /// 增加1s避免与开屏音乐撞车(覆盖)
      Timer(const Duration(seconds: 1), () {
        AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.touch);
      });
    }
    await _checkUpdate(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));
    }
  }
}