我正在发现Flutter,我真的很喜欢。 我正在构建一个简单的应用程序,在Scafold的主体上几乎没有Statefull自定义小部件“ Counter”的实例,并且在抽屉上有一个“重置”按钮。
当点击“重置”按钮时,在所有“计数器”实例上调用“ resetCounter”方法的最佳方法是什么?
我已经尝试了另一种方式(从孩子那里调用父级的回调方法),但是我找不到另一种方式。我找到的唯一解决方案是使用GlobalKeys,但这似乎不合适。
谢谢
答案 0 :(得分:1)
实际上,您的情况回调函数可能是正确的。但是,当您的应用程序增长时,小部件层次结构将变得越来越复杂。目前,您具有Parent —> Child
关系,并且很容易传递回调函数,但是当您遇到Parent —> Widget A—> Widget B—> Child
情况以便将回调从Parent传递给Child时,您需要通过{{ 1}}和Widget A
。
对我来说,您的问题听起来像是反应流的理想选择。您可以创建一个Widget B
,当用户点击Sink
按钮时将使用该Reset
,您的Counter
将观察此事件并使用resetCounter
方法进行处理。您可以从this presentation了解有关反应式编程(以及解决问题的其他方法)的更多信息。
答案 1 :(得分:0)
还有另一种方法来扩展ChangeNotifier并将子级添加为侦听器。父级执行操作后,您可以调用notifyChange来触发子级小部件回调。