假设有一个小部件具有控制可见性动画的方法,toggleVisibility()
. 在 BLoC 模式中,我想使用流来调用该函数。我觉得这很棘手。
- 由于它是动画而不是完整的重绘,因此 StreamBuilder 不适合。
手动向 BLoC 流添加侦听器也不方便。
- 在
initeState()
目标小部件的功能中,我们没有上下文,因此很难获得对 BLoC 的引用。
编辑:在我阅读Rémi Rousselet 的回答后,情况并非如此。我们甚至可以在
build()
函数之外访问上下文,因为State<T>
类有一个名为“上下文”的属性,并且记录在 Flutter 的文档中......我不知道这一点。- 在
build(context)
目标小部件的功能中,我们有上下文。但是小部件可以经常重新构建,因此您必须手动清理过时的订阅。否则会产生大量垃圾。
- 在
- 可以使用 StreamBuilder 进行破解,因为 StreamBuilder 已经实现了所有订阅和取消订阅功能。在目标小部件的布局中的某处插入 StreamBuilder。
StreamBuilder(
stream: Bloc.of(context).stream,
builder: (context, snapshot){
toggleVisiblity();
return Container():
}
);
但这真的是一个黑客。它将布局与逻辑混合在一起,并引入了一个可能导致布局错误的无用小部件。
所以我想知道在颤振中是否有一种很好的方法来做到这一点。