bloc.dart 1.61 KB
import 'package:bloc/bloc.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:wow_english/common/extension/string_extension.dart';
import 'package:wow_english/utils/audio_player_util.dart';

import 'event.dart';
import 'game_entity.dart';
import 'state.dart';

class GamesBloc extends Bloc<GamesEvent, GamesState> {
  late MethodChannel _methodChannel;

  //手动初始化4个GameEntity对象
  final List<GameEntity> _games = [
    GameEntity()
      ..id = 1
      ..imageName = 'game_food_1'.assetPng
      ..name = 'Food',
    GameEntity()
      ..id = 2
      ..imageName = 'game_halloween_2'.assetPng
      ..name = 'Halloween',
    GameEntity()
      ..id = 3
      ..imageName = 'game_toy_3'.assetPng
      ..name = 'Toy',
    GameEntity()
      ..id = 4
      ..imageName = 'game_animal_4'.assetPng
      ..name = 'Animal'
  ];

  List<GameEntity> get listData => _games;

  GamesBloc() : super(GamesState().init()) {
    on<InitEvent>(_init);
    on<GotoGamePageEvent>(_gotoGamePage);
  }

  void _init(InitEvent event, Emitter<GamesState> emit) async {
    AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.inMyTummy);
    emit(state.clone());
  }

  void _gotoGamePage(GotoGamePageEvent event, Emitter<GamesState> emit) async {
    await AudioPlayerUtil.getInstance().pause();
    try {
      _methodChannel = const MethodChannel('wow_english/game_method_channel');
      await _methodChannel
          .invokeMethod('openGamePage', {"gameId": event.gameId});
    } on PlatformException catch (e) {
      debugPrint("Failed to go to native page: '${e.message}'.");
    }
  }
}