使用继承的小部件传递小部件键

Posted

技术标签:

【中文标题】使用继承的小部件传递小部件键【英文标题】:Pass widget key with inherited widget 【发布时间】:2021-05-24 00:23:58 【问题描述】:

有没有办法通过继承的小部件(provider、riverPod、InheritedWidget..etc)传递小部件密钥。

如果是这样,有什么优点和缺点。

我想要做的是使小部件 const(在小部件树中)并将密钥作为继承的小部件传递,因为它不能是 const,因为密钥来自一个对象。

  const MyWidget(
    Key key,
  ):super(key: key);

【问题讨论】:

【参考方案1】:

这对你来说应该是一个很好的阅读材料: https://medium.com/coding-with-flutter/flutter-global-access-vs-scoped-access-with-provider-8d6b94393bdf

在我看来,使用 InheritedWidget (Provider) 或 riverpod - 这将是范围访问注入 - 是一个不错的方法。您的替代方法是创建一个全局变量,这是一种不太可测试(或根本不可测试)的方法。

更新:这是您将密钥传递给小部件的方式:

MyCustomWidget(
  required this.widgetData
  required final Key key,
) : super(key: key);

【讨论】:

感谢您回答 Alexey,但我想知道如何通过继承的小部件设置小部件键,我想知道除了小部件构造之外的另一种传递键的方式。 据我所知,除非您深入了解 Flutter 框架,否则仅将密钥传递给 widget 超类构造函数会使小部件树接受密钥。我会更新答案。 是否有另一种方法来传递密钥而不是使用小部件构造函数。 没有别的办法。元素层的键操作在Widget类中定义,该类由其他小部件类扩展,因此超类必须通过构造函数中的super调用来接收键。

以上是关于使用继承的小部件传递小部件键的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:继承的小部件和路由

如何将 Taps 传递给顶部小部件下方的小部件?

Flutter:如何在构造函数中传递值,以便我可以重用我的小部件?

在 Flutter 中的小部件之间传递数据的最佳方式

为啥我继承的小部件的行为不像超类[重复]

如何从有状态的小部件类传递变量? - 颤动[重复]