【问题标题】:How to access data of child widget in parent in flutter?如何在颤动中访问父级中子小部件的数据?
【发布时间】:2019-11-15 14:36:16
【问题描述】:

我想知道父小部件中子(或子的子)小部件中某个字段的值,只有当我想知道它时。
在这种情况下,使用 Callback 或 InheritedWidget/Provider 不起作用,因为每次孩子的值发生变化时,它都会为我提供信息。当父母有行动时,我只需要孩子的价值。因此,聆听所有更改是一种开销。
另一种选择是使用 key 从孩子那里获取信息,但孩子可以是多个,因此必须创建那么多密钥并以某种方式将它们附加到孩子身上。而且钥匙有点贵。
另一种选择是存储孩子的实例并从中获取价值。

对于一个简单的任务来说,每个选项似乎都是多余的。我赞成关键方法,因为它给人的感觉是它们是为这些类型的场景创建的。有没有人对这种情况有更好的了解?

一个简单的用例是:
想象一个父母在中间有一个 PageView 和一个下一步按钮。中间的页面包含一个更改其值的滑块。当我们按下下一步时,我们想知道滑块的最终值是多少。

【问题讨论】:

  • 您可以在子窗口小部件中的一个变量上使用静态来直接访问一个值。我不明白为什么提供者/回调不起作用。我在我的孩子上使用 scopedModel 插件(类似于提供程序),我可以在我的孩子小部件中获取我更新的任何信息。
  • 你可以阅读我写的帖子:medium.com/flutter-community/…
  • @FadhliS 将变量设为静态意味着,每个人都可以访问它们。这不是我们想要的行为。
  • 谢谢@diegoveloper,我做到了。这是一个很有帮助的帖子。虽然问题的用例有点不同。

标签: flutter dart inherited-widget


【解决方案1】:

它看起来如此困难是有原因的:你不应该这样做。

小部件被刻意限制为强制执行单向数据流,这对于大型应用的可维护性至关重要。

您应该通过继承的小部件和类似模式“提升状态”,而不是读取后代的状态。

【讨论】:

  • “小部件故意非常有限地强制执行单向数据流,这对于大型应用程序的可维护性至关重要”。请您详细说明一下吗?
  • 能否为 Flutter 添加对这个模式的引用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多