【问题标题】:Why do I need an InheritedWidget in Flutter为什么我需要 Flutter 中的 InheritedWidget
【发布时间】:2021-03-16 16:29:40
【问题描述】:

我已经开始了解 Flutter 的继承小部件,我有一个问题。 如果我们可以从 context.findAncestorOfExactType 获取数据,为什么还需要 InheritedWidget? 还有那个 updateShouldNotify... 就像,当某些条件为真时它会通知子小部件,并且它们无论如何都会在 InheritedWidget 更改后运行其构建方法,因为它是不可变的,我们只能在某些重建中对其进行更改...

【问题讨论】:

  • 你的意思是 findAncestorWidgetOfExactType 吗?
  • @bluenile 是 findAncestorWidgetOfExactType 和 findAncestorStateOfType

标签: flutter widget inherited-widget


【解决方案1】:

InheritedWidget 对于构建方法的情况更有用。当您想从构建方法中的祖先获取数据时。

来自 Flutter API:https://api.flutter.dev/flutter/widgets/BuildContext/findAncestorStateOfType.html

这不应该在构建方法中使用,因为构建上下文 如果此方法返回的值将不会被重建 变化。一般来说,dependOnInheritedWidgetOfExactType 比较多 适合此类情况。这种方法对于改变 以一次性方式的祖先小部件的状态,例如,导致 一个祖先滚动列表,用于将此构建上下文的小部件滚动到 查看或移动焦点以响应用户交互。

此外,通过执行您提到的操作,您将小部件耦合在一起,这根本不是一个好习惯。众所周知,小部件无需太多修改即可从一个地方移动到另一个地方。

继承的小部件有很多有用的东西。其中一些是非常有用的包,我建议你看看它们。

你也可以看看InheritedWidget documentation

【讨论】:

  • 您能否举个代码示例,在其中我们将更新某些小部件中的值,但它的子级(或其子级的子级,无论如何它应该是小部件,它位于树的下方) 不会用新的价值重建吗?我试过像我说的那样做一些例子,但每次子小部件都是用它的祖先的新值重建的(值是从 context.findWidgetOfExactType() 传递的)
猜你喜欢
  • 2021-08-16
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2021-08-31
  • 2020-04-03
  • 2020-07-25
相关资源
最近更新 更多