| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Flutter Key详解(LocalKeyGlobalKey)获取子组件 -> 正文阅读 |
|
[移动开发]Flutter Key详解(LocalKeyGlobalKey)获取子组件 |
1.Flutter Key我们平时一定接触过很多的?Widget,比如?Container、Row、Column?等,它们在我们绘制界面的过程中发挥着重要的作用。但是不知道你有没有注意到,在几乎每个?Widget?的构造函数中,都有一个共同的参数,它们通常在参数列表的第一个,那就是?Key. 在Flutter中,Key是不能重复使用的,所以Key一般用来做唯一标识。组件在更新的时候,其状态的保存主要是通过判断组件的类型或者key值是否一致。因此,当各组件的类型不同的时候,类型已经足够用来区分不同的组件了,此时我们可以不必使用key。但是如果同时存在多个同一类型的控件的时候,此时类型已经无法作为区分的条件了,我们就需要使用到key。 Flutter key子类包含?LocalKey?和?GlobalKey?。 局部键(LocalKey):ValueKey、ObjectKey、UniqueKey ? ? ? ? ValueKey?(值key)把一个值作为key?, ? ? ? ? UniqueKey(唯一key)程序生成唯一的Key,当我们不知道如何指定ValueKey的时候就可以使用UniqueKey, ? ? ? ? ObjectKey(对象key)把一个对象实例作为key。 全局键(GlobalKey):?GlobalKey、GlobalObjectKey? ? ? ? GlobalKey(全局key),GlobalObjectKey(全局Objec key,和ObjectKey有点类似). 没有?Key?会发生什么奇怪现象如下面例: 定义了一个StatefulWidget的Box,点击Box的时候可以改变Box里面的数字,当我们重新对Box排序的时候Flutter就无法识别到Box的变化了, 这是什么原因呢? 运行后我们发现改变list Widget顺序后,Widget颜色会变化,但是每个Widget里面的文本内容并没有变化,为什么会这样呢?当我们List重新排序后Flutter检测到了Widget的顺序变化,所以重新绘制ListWidget,但是Flutter?发现List Widget?里面的元素没有变化,所以就没有改变Widget里面的内容。 把List?里面的Box的颜色改成一样,这个时候您重新对list进行排序,就很容易理解了。重新排序后虽然执行了setState,但是代码和以前是一样的,所以Flutter不会重构List Widget里面的内容,?也就是Flutter没法通过Box里面传入的参数来识别Box是否改变。如果要让FLutter能识别到List Widget子元素的改变,就需要给每个Box指定一个key。
?2.GlobalKey?获取子组件(3种)? ? ?globalKey.currentState: 可以获取子组件的状态,执行子组件的方法, ? ? ? ? ?globalKey.currentWidget:可以获取子组件的属性,
3.Widget Tree、Element Tree?和?RenderObject TreeFlutter应用是由是Widget Tree、Element Tree?和?RenderObject Tree组成 Widget可以理解成一个类, Element可以理解成Widget的实例, Widget与Element的关系可以是一对多,一份配置可以创造多个Element实例.
默认情况下面,当Flutter同一个?Widget的大小,顺序变化的时候,FLutter不会改变Widget的state。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/1 0:47:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |