首页 > 解决方案 > 如何在 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 本身提供了实例,我什至应该处置吗?我需要能够在外部更新块中预先存在的值,因此我希望在应用程序的整个生命周期中保持流打开。

标签: flutterdartrxdart

解决方案


MakeMyProductsBloc有更大的范围,例如App范围

BlocProvider<MyProductsBloc>(
    bloc: ...,
    child: MaterialApp(...)
)

推荐阅读