是否可以通过类似通知/事件巴士的方式进行国际部件沟通?国际部件沟通
我需要能够告诉一个小部件对另一个小部件发生的事情做出反应,并且不想创建硬链接。
通知侦听器只会触发,如果它在窗口小部件树中高于两个窗口小部件,所以这可能不是一个可行的解决方案。
是否可以通过类似通知/事件巴士的方式进行国际部件沟通?国际部件沟通
我需要能够告诉一个小部件对另一个小部件发生的事情做出反应,并且不想创建硬链接。
通知侦听器只会触发,如果它在窗口小部件树中高于两个窗口小部件,所以这可能不是一个可行的解决方案。
根据您的使用情况,有很多方法可以做到这一点。
您可以让它们为AnimatedWidget
s,通过ValueNotifier
或ChangeNotifier
作为listenable
。您可以在图库的animation example中看到此图案。
您可以使用StreamBuilder
在Stream
发生新事件时自动重建您的小部件。在主Flutter回购中没有很多这样的例子,但是一旦你开始使用插件或者做网络I/O,你可能需要这样的例子。
您可以使用GlobalKey
来获得currentState
并在另一个有一个State
调用方法。这是小吃店的工作方式(example)。
您还可以扩展InheritedWidget
为小部件提供未作为构造函数参数传递的信息,并且当信息发生变化时它们将自动标记为重建。例如,Theme
就是这样工作的。
如果您可以提供更多关于您的小部件的功能/关系的详细信息,或理想的代码片段,我可以帮助您决定哪种方法最适合您的情况。
而你已经排除了从小部件本身分离业务逻辑(它操纵状态)?天真地说,业务逻辑会更新全局状态(la redux或类似),然后再通过小部件树级联? –