2017-06-01 35 views
5

是否可以通过类似通知/事件巴士的方式进行国际部件沟通?国际部件沟通

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

通知侦听器只会触发,如果它在窗口小部件树中高于两个窗口小部件,所以这可能不是一个可行的解决方案。

+0

而你已经排除了从小部件本身分离业务逻辑(它操纵状态)?天真地说,业务逻辑会更新全局状态(la redux或类似),然后再通过小部件树级联? –

回答

5

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

您可以让它们为AnimatedWidget s,通过ValueNotifierChangeNotifier作为listenable。您可以在图库的animation example中看到此图案。

您可以使用StreamBuilderStream发生新事件时自动重建您的小部件。在主Flutter回购中没有很多这样的例子,但是一旦你开始使用插件或者做网络I/O,你可能需要这样的例子。

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

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

如果您可以提供更多关于您的小部件的功能/关系的详细信息,或理想的代码片段,我可以帮助您决定哪种方法最适合您的情况。