问题是,我想使用emit和on
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);
}
}发布于 2022-03-08 14:16:39
您没有共享HomeBloc的全部实现,因此这可能会有一些错误,但它应该会使您非常接近。基本上,您不再需要手动调用yield。您只需创建以相关事件和Emitter<HomeState> (或您的集团的相关State为参数)作为参数的方法,并在构造函数的on<YourEvent>部分调用该方法。
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));
}
}https://stackoverflow.com/questions/71392520
复制相似问题