是否可以通过通知/事件总线等方式进行小部件间通信?
我需要能够告诉一个小部件对另一个小部件发生的事情作出反应,并且不想创建硬链接。
通知监听器只会在窗口小部件树中比两个窗口小部件更高时触发,因此这可能不是一个可行的解决方案。
答案 0 :(得分:17)
根据您的使用情况,有很多方法可以做到这一点。
您可以将AnimatedWidget
作为ValueNotifier
传递ChangeNotifier
或listenable
。您可以在图库animation example中看到此模式。
当StreamBuilder
上有新事件发生时,您可以使用Stream
自动重建小部件。在主要的Flutter仓库中没有很多这样的例子,但是一旦你开始使用插件或进行网络I / O,你就可能需要它。
您可以使用GlobalKey
获取currentState
并在另一方拥有一个State
来电方法。这就是零食栏的工作方式(example)。
您还可以扩展InheritedWidget
以向小部件提供未作为构造函数参数传递的信息,并且当信息更改时,它们将自动标记为重建。例如,这就是Theme
的工作方式。
如果您可以提供有关您的小部件的功能/他们的关系的更多详细信息,或者理想情况下是一个代码段,我可以帮助您确定哪种方法最适合您的情况。