首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在flutter_bloc V7中将此代码传输到flutter_bloc V8?

如何在flutter_bloc V7中将此代码传输到flutter_bloc V8?
EN

Stack Overflow用户
提问于 2022-03-08 09:13:19
回答 1查看 146关注 0票数 0

问题是,我想使用emit和on

代码语言:javascript
复制
import 'package:bloc/bloc.dart';    
import 'data/repository/irepository.dart';
import 'home_event.dart';
import 'home_state.dart';
class HomeBloc extends Bloc<HomeEvent, HomeState> {
  IRepository _repository;
  HomeBloc(this._repository) : super(HomeState.initail());
  @override
  HomeState get initialState => HomeState.initail();
  // I want to replace this stream with a new version and change all the bloc 
  Stream<HomeState> mapEventToState(
      HomeEvent event,
      ) async* {
    if (event is ClearError) {
      yield state.rebuild((b) => b..error = "");
    }
 
    if (event is GetHomeData) {
      try {
        yield state.rebuild((b) => b
          ..isLoading = true
          ..error = ""
          ..isSucessGet = false
          ..GetDataHome = null);
        final slidersData = await _repository.getHomeData();
        yield state.rebuild((b) => b
          ..isLoading = false
          ..error = ""
          ..isSucessGet = true
          ..GetDataHome.replace(slidersData));
      } catch (e) {
        print('profile Error $e');
        yield state.rebuild((b) => b
          ..isLoading = false
          ..isSucessGet = false
          ..error = "Please check network connection"
          ..GetDataHome = null);
      }
    }
EN

回答 1

Stack Overflow用户

发布于 2022-03-08 14:16:39

您没有共享HomeBloc的全部实现,因此这可能会有一些错误,但它应该会使您非常接近。基本上,您不再需要手动调用yield。您只需创建以相关事件和Emitter<HomeState> (或您的集团的相关State为参数)作为参数的方法,并在构造函数的on<YourEvent>部分调用该方法。

代码语言:javascript
复制
class HomeBloc extends Bloc<HomeEvent, HomeState> {
  IRepository _repository;
  HomeBloc(this._repository) : super(HomeState.initail()) {
    on<ClearError>(_onClearError);
    on<GetHomeData>(_onClearError);
  }

  Future<void> _onClearError(
    ClearError event,
    Emitter<HomeState> emit,
  ) {
    emit(state.rebuild((b) => b..error = ""));
  }

  Future<void> _onGetHomeData(
    GetHomeData event,
    Emitter<HomeState> emit,
  ) async {
    try {
      emit(state.rebuild((b) => b
        ..isLoading = true
        ..error = ""
        ..isSucessGet = false
        ..GetDataHome = null));
      final slidersData = await _repository.getHomeData();
      emit(state.rebuild((b) => b
        ..isLoading = false
        ..error = ""
        ..isSucessGet = true
        ..GetDataHome.replace(slidersData)));
    } catch (e) {
      print('profile Error $e');
      emit(state.rebuild((b) => b
        ..isLoading = false
        ..isSucessGet = false
        ..error = "Please check network connection"
        ..GetDataHome = null));
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71392520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档