Inter Widget通讯

问题描述 投票:10回答:1

是否可以通过通知/事件总线等方式进行小部件间通信?

我需要能够告诉一个小部件对另一个小部件发生的事情作出反应并且不想创建硬链接。

只有在窗口小部件树中它比两个窗口小部件更高时,通知监听器才会触发,因此这可能不是一个可行的解决方案。

flutter
1个回答
16
投票

根据您的使用情况,有很多方法可以做到这一点。

你可以让它们是AnimatedWidgets,通过ValueNotifierChangeNotifier作为listenable。你可以在Gallery的animation example中看到这种模式。

StreamBuilder上有新事件发生时,您可以使用Stream让您的小部件自动重建。在主要的Flutter仓库中没有很多这样的例子,但是一旦你开始使用插件或进行网络I / O,你就可能需要它。

您可以使用GlobalKey来获取currentState并在另一方面使用一个State调用方法。这就是小吃店的工作方式(example)。

您还可以扩展InheritedWidget以提供未作为构造函数参数传递的信息的小部件,并且当信息更改时,它们将自动标记为重建。例如,这就是Themes的工作方式。

如果您可以提供有关您的小部件的功能/他们的关系的更多详细信息,或者理想情况下是一个代码段,我可以帮助您确定哪种方法最适合您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.