使用继承的小部件传递小部件键
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调用来接收键。以上是关于使用继承的小部件传递小部件键的主要内容,如果未能解决你的问题,请参考以下文章