bloc.dart 1.43 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 '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 {
    emit(state.clone());
  }

  void _gotoGamePage(GotoGamePageEvent event, Emitter<GamesState> emit) async {
    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}'.");
    }
  }
}