Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在widgetTree之外访问rxdart bloc函数?_Flutter_Dart_Rxdart - Fatal编程技术网

Flutter 如何在widgetTree之外访问rxdart bloc函数?

Flutter 如何在widgetTree之外访问rxdart bloc函数?,flutter,dart,rxdart,Flutter,Dart,Rxdart,我正在尝试将一些数据传递给rxdart主题。我有一个streambuilder,可以访问我的产品群中的数据。现在,当我试图访问widget树之外的bloc时,我得到了这个错误 Unhandled Exception: Bad state: Cannot add new events after calling close. 这是我的阵营。我想访问widgetTree之外的bloc内部的removeProduct函数(即从套接字事件)。如果主题未处于活动状态,则可以,但如果主题处于活动状态,则

我正在尝试将一些数据传递给rxdart主题。我有一个streambuilder,可以访问我的产品群中的数据。现在,当我试图访问widget树之外的bloc时,我得到了这个错误

 Unhandled Exception: Bad state: Cannot add new events after calling close.
这是我的阵营。我想访问widgetTree之外的bloc内部的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();

类MyProductsBloc{
最终MyProductsRepo _repository=MyProductsRepo();
最终行为主体_subject=行为主体();
getMyProducts()异步{
最终id=UserController.to.id;
MyProducts response=wait_repository.getProducts(id);
_subject.sink.add(响应);
}
removeProduct(id)异步{
如果(!\u主题已关闭){
_subject.value.data.removeWhere((element)=>element.id==id);
_subject.sink.add(_subject.value);
}
}
处置{
_主题?.close();
}
行为主体get subject=>\u subject;
}
最终myProductsBloc=myProductsBloc();

编辑:有什么理由我应该在我的小部件树中处理bloc吗?因为我没有访问bloc的多个实例,因为bloc本身提供了实例,所以我甚至应该处理它吗?我需要能够从外部更新集团中预先存在的值,以便在应用程序的整个生命周期中保持流的开放。

Make
MyProductsBloc
具有更大的范围,例如应用程序范围

BlocProvider(
集团:。。。,
子项:MaterialApp(…)
)

Make
MyProductsBloc
具有更大的范围,例如应用程序范围

BlocProvider(
集团:。。。,
子项:MaterialApp(…)
)