【发布时间】:2021-07-26 11:38:06
【问题描述】:
我正在尝试寻找管理异步查询的解决方案。例如,我有网上商店,我想在更改城市时更新所有产品和类别。而且我不想将所有异步逻辑保留在 ui 上。为了达到这个结果,我创建了这个集团:
class AppEvent {
String message;
AppEvent({this.message = ''});
}
class EventsBlock extends Bloc<AppEvent, AppEvent> {
EventsBlock() : super(AppEvent());
@override
Stream<AppEvent> mapEventToState(AppEvent event) async* {
yield event;
}
}
final events = EventsBlock();
然后,我可以这样使用它:
class CityCubit() {
CityCubit() : super(CityState());
Future<void> changeCity() async {
await api.changeCity();
events.add(AppEvent(message: 'cityChanged'));
}
}
class CategoryCubit extends Cubit<CategoryState> {
CategoryCubit() : super(CategoryEmptyState()) {
events.stream.listen((e) {
if(e.message == 'cityChanged') {
fetchCategories();
}
});
};
Future<void> fetchCategories() async {
//fetch categories
}
}
class ProductCubit extends Cubit<ProductState> {
ProductCubit() : super(ProductEmptyState()) {
events.stream.listen((e) {
if(e.message == 'cityChanged') {
fetchProducts();
}
});
};
Future<void> fetchProducts() async {
//fetch products
}
}
这有点像 eventBus 模式。但我不确定这是使用 bloc 的正确方法。我尝试过使用 redux + redux saga,但它有很多样板文件,我相信 Flutter 有更好的解决方案来管理这样的事情。
【问题讨论】: