【问题标题】:How can I listen to changes in my bloc stream如何收听我的 bloc 流中的变化
【发布时间】:2020-12-16 14:50:48
【问题描述】:

我是 Flutter 新手,正在尝试使用 Bloc 架构构建应用程序。

我可以设法找出一个接收器,输入我的事件bloc.updateNavigation(_selectedItem.value);。我还想出了如何通过调用我的 bloc 来使用这些数据(这就是它的名字)。我有一个 TextFormField 并更改了一些设置,例如 if (bloc.navigationProvider.currentNavigation == 1)if (bloc.navigationProvider.currentNavigation == 2)

有一件事我不知道该怎么做。每当集团发生变化时,我想设置_Controller.clear();。因此,每当用户进行新选择并更改“currentNavigation”时,文本控制器都会清除。有没有一种方法可以让我知道何时进行了更改,而不必通过更改来调用。我想做类似if (change is made to currentNavigation) {_Controller.clear();}

我的 bloc 文件如下所示:

class NavigationBloc {
  final navigationController = StreamController();
  NavigationProvider navigationProvider = new NavigationProvider();

  Stream get getNavigation => navigationController.stream;

  void updateNavigation(int navigation) {
    navigationProvider.updateNavigation(navigation);
    navigationController.sink.add(navigationProvider.currentNavigation);
  }

  void dispose() {
    navigationController.close();
  }
}

final bloc = NavigationBloc();

【问题讨论】:

    标签: flutter bloc stream-builder


    【解决方案1】:

    流有一个.listen(..) 方法,每次将数据传递到流中时都会调用该方法。

    为了更好地使用,请使用flutter_bloc 包。它提供了为所有后代提供块的小部件(BlocProvider)和监听状态变化的小部件(BlocListener)。在那里您根本不必处理流,并且有一些插件可以帮助创建样板代码。

    【讨论】:

    • 问题是我实际上对传递到流中的数据并不感兴趣,只是对数据已经传递的事实感兴趣。我不需要数据,我只想说,在传递数据时,清除控制器。
    • flutter_bloc 包确实看起来很有趣,并且可能是处理我一直在使用的东西的更好方法,但现在更新我所有的集团以使用该包似乎仍然是一项艰巨的任务。
    • 您可以忽略listen方法中的数据并将其清除:) 每次更新流时都不会触发单独的方法
    猜你喜欢
    • 2022-01-11
    • 2021-09-27
    • 2022-06-26
    • 2021-06-27
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2020-06-15
    相关资源
    最近更新 更多