栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无状态窗口小部件类中的键是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无状态窗口小部件类中的键是什么?

TLDR:所有小部件都应有一个

Key key
as 可选 参数或其构造函数。
Key
是flutter引擎在识别列表中的哪个小部件已更改的步骤中使用的东西。


当您具有可能会被删除/插入 的相同类型 的小部件 列表

Column
Row
无论如何)时,此功能很有用。 __

假设您有此代码(代码不起作用,但是您知道了):

AnimatedList(  children: [    Card(child: Text("foo")),    Card(child: Text("bar")),    Card(child: Text("42")),  ])

潜在地,您可以通过滑动分别删除所有这些小部件。

事实是,当删除一个孩子时,我们的列表中有一个动画。因此,让我们删除“酒吧”。

AnimatedList(  children: [    Card(child: Text("foo")),    Card(child: Text("42")),  ])

问题:如果没有

Key
,则flutter将无法知道您的第二个元素是否
Row
消失了。或者,如果它是最后一个消失了,而第二个则改变了孩子。

因此

Key
,如果没有,您可能会遇到一个错误,即您的 请假 动画将在最后一个元素上播放!


这就是

Key
发生的地方。

如果我们再次开始我们的示例,使用键,我们将有:

AnimatedList(  children: [    Card(key: ObjectKey("foo"), child: Text("foo")),    Card(key: ObjectKey("bar"), child: Text("bar")),    Card(key: ObjectKey("42"), child: Text("42")),  ])

注意键 不是 子索引,而是元素唯一的键。

从这一点来说,如果我们再次删除“ bar”,我们将拥有

AnimatedList(  children: [    Card(key: ObjectKey("foo"), child: Text("foo")),    Card(key: ObjectKey("42"), child: Text("42")),  ])

由于

key
存在,Flutter引擎现在可以确定删除了哪个小部件。现在,我们的 请假 动画将正确在“ bar”而不是“ 42”上播放。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392412.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号