如何收听我的 bloc 流中的变化
Posted
技术标签:
【中文标题】如何收听我的 bloc 流中的变化【英文标题】:How can I listen to changes in my bloc stream 【发布时间】: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();
【问题讨论】:
【参考方案1】:流有一个.listen(..)
方法,每次将数据传递到流中时都会调用该方法。
为了更好地使用,请使用flutter_bloc 包。它提供了为所有后代提供块的小部件(BlocProvider)和监听状态变化的小部件(BlocListener)。在那里您根本不必处理流,并且有一些插件可以帮助创建样板代码。
【讨论】:
问题是我实际上对传递到流中的数据并不感兴趣,只是对数据已经传递的事实感兴趣。我不需要数据,我只想说,在传递数据时,清除控制器。 flutter_bloc 包确实看起来很有趣,并且可能是处理我一直在使用的东西的更好方法,但现在更新我所有的集团以使用该包似乎仍然是一项艰巨的任务。 您可以忽略listen方法中的数据并将其清除:) 每次更新流时都不会触发单独的方法以上是关于如何收听我的 bloc 流中的变化的主要内容,如果未能解决你的问题,请参考以下文章
如何从使用 Futures/async/await 的流中正确生成?