如何解决如何在widgetTree之外访问rxdart-bloc函数?
我正在尝试将一些数据传递给rxdart主题。我有一个streambuilder,可以从我的产品集团访问数据。现在,当我尝试访问小部件树之外的块时,会出现此错误。
Unhandled Exception: Bad state: Cannot add new events after calling close.
这是我的集团。我想在我的widgetTree外部的块内访问removeProduct函数(即来自套接字事件)。如果主题未处于活动状态,则很好,但是如果主题处于活动状态,则我想更改主题并重建streambuilder。这是我的集团。
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本身提供了该实例,所以我什至应该处置?我需要能够从外部更新整体中预先存在的值,以便在应用程序的整个生命周期中保持流打开。
解决方法
使MyProductsBloc
具有更大的范围,例如App范围
BlocProvider<MyProductsBloc>(
bloc: ...,child: MaterialApp(...)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。