flutter - 如何在 widgetTree 之外访问 rxdart-bloc 函数?
问题描述
我正在尝试将一些数据传递给 rxdart 主题。我有一个流构建器,它可以访问我的产品集团中的数据。现在,当我尝试访问小部件树之外的 bloc 时,我收到此错误。
Unhandled Exception: Bad state: Cannot add new events after calling close.
这是我的集团。我想访问我的 widgetTree 之外的块内的 removeProduct 函数(即来自套接字事件。)。如果主题不活动很好,但如果主题是活动的,我想更改主题并重建流构建器。这是我的集团。
class MyProductsBloc {
final MyProductsRepo _repository = MyProductsRepo();
final BehaviorSubject<MyProducts> _subject = BehaviorSubject<MyProducts>();
getMyProducts() async {
final id = UserController.to.id;
MyProducts response = await _repository.getProducts(id);
_subject.sink.add(response);
}
removeProduct(id) async {
if(!_subject.isClosed){
_subject.value.data.removeWhere((element) => element.id == id);
_subject.sink.add(_subject.value);
}
}
dispose() {
_subject?.close();
}
BehaviorSubject<MyProducts> get subject => _subject;
}
final myProductsBloc = MyProductsBloc();
编辑:有什么理由我应该在我的小部件树中处理 bloc 吗?因为我没有访问 bloc 的多个实例,因为 bloc 本身提供了实例,我什至应该处置吗?我需要能够在外部更新块中预先存在的值,因此我希望在应用程序的整个生命周期中保持流打开。
解决方案
MakeMyProductsBloc
有更大的范围,例如App范围
BlocProvider<MyProductsBloc>(
bloc: ...,
child: MaterialApp(...)
)
推荐阅读
- c++ - PCRE2:检查字符串是否匹配模式而不浪费时间构建匹配数据?
- python - 如何将来自 json 的更改保存在同一列或新列中?
- ruby-on-rails - Rails 6 插件:创建自定义路由
- python - 按下按钮时 GPIO 事件检测未提供输出
- python - 如何规范化 BatchDataset 并在模型中使用它?
- mysql - MAMP PRO 的用户名和密码
- webforms - Drupal 8 Webform 文件上传
- css - 为什么容器大于 50% 的字体大小会发生变化?
- kubernetes - 无法在 Kubernetes 中部署的 Prometheus 服务器中找到 Prometheus 自定义应用程序导出器作为目标
- facebook-graph-api - Fb/Instagram Graph API:(#10)business_discovery 权限被拒绝