第一种:

当状态更新时,GlobalKey不会丢失状态

GlobalKey 只有一种类型,它只和自己相等。

定义GlobalKey

final _globalKey = GlobalKey;

GlobalKey只能单独使用不能重复使用,不然会报Duplicate GlobalKey detected in widget tree.当然你可以定义多个GlobalKey。

第二种:

当我们需要找到一个数据时,我们给这个组件定义一个GlobalKey。

_globalKey.currentState:获取所定义的State状态
_globalKey.currentWidget:获取所定义的Widget
_globalKey.currentContext:指的是当前BuilderContext
(_globalKey.currentContext!.findRenderObject() as RenderBox).size;获取当前屏幕的大小
(_globalKey.currentContext!.findRenderObject() as RenderBox).localToGlobal(Offset.zero);离屏幕的宽度和高度
            MyCounter(key: _globalKey,),//点击按钮获取MyCounter中的值OutlinedButton(onPressed: () {final state =_globalKey.currentState as _MyCounterState;print(state._counter);}, child: Text('GlobalKey获取'))

final state =_globalKey.currentState as _MyCounterState;意思是获取GlobalKey中的状态, GlobalKey并不知道他会在哪一个Widget的组件中所以我们要进行类型转换。 as 在Dart中代表类型转换。

class MyCounter extends StatefulWidget {const MyCounter({Key? key}) : super(key: key);@overrideState<MyCounter> createState() => _MyCounterState();
}class _MyCounterState extends State<MyCounter> {int _counter = 0;@overrideWidget build(BuildContext context) {return Container(height: 100,width: 100,color: Colors.orange,child: TextButton(onPressed: () {setState(() {_counter++;});},child: Text(_counter.toString(),textScaleFactor: 3,),),);}
}

GlobalKey的使用方法相关推荐

  1. flutter怎么手动刷新_flutter局部刷新的实现示例

    局部刷新 我们在做项目的时候,都需要单独的去刷新一个值,而不是把整个界面都重绘.大家都知道setState是进行重绘的一个方法,他会执行生命周期的一个build,这将会使得整个界面来进行重绘.当然我们 ...

  2. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  3. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  4. Flutter中的Key和GlobalKey

    1.Key 参考:https://api.flutter.dev/flutter/widgets/Widget/key.html 控制一个widget该如何替换掉树中的另一个widget:如果两个wi ...

  5. flutter父组件调用子组件方法

    Key 概念参考前端react和vue中key值的含义,如果列表key不更改,则即便数据又修改视图也没有更改. ValueKey:以一个值为key. ObjectKey:以一个对象为key. Uniq ...

  6. flutter 父组件调用子组件方法

    子组件 子组件定义 GlobalKey<_ListRefreshRequestNewsState> globalKey = GlobalKey();, 定义方法 void getRefre ...

  7. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程

    参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...

  8. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  9. IDEA自动生成对象所有set方法

    idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...

最新文章

  1. 数据竞赛利器XGBoost常见面试题集锦
  2. 事情在不断的解决中,想念巫英才和张国振
  3. postgresql数据库安装及简单操作
  4. 草稿 前端开发 代码的编写习惯 缩进的意义 HTML的格式
  5. 语言 物品竞拍系统_整理家务不用愁!HSR家庭自主整理机器人系统
  6. 一篇文章教你学会如何使用CSS中的雪碧图(CSS Sprite)
  7. QT 用QAudio语音库实现音频信号的采集 以及发送到另一台电脑 播放
  8. Python学习笔记(六)——查询天气脚本
  9. php js 获取 客户端ip地址,JavaScript获取客户端IP的方法(新方法)
  10. github第一次使用--创建hello-world
  11. 前端Unicode字符图标汇总
  12. 目前国内汉语自动分词系统的研究现状
  13. Android UI开发神兵利器之设计资源
  14. Paul Graham:梦寐以求的编程语言
  15. 白岩松人生哲学-听后感
  16. tilemap 导入unity_Unity2019基础教程:TileMap搭建像素画场景关卡
  17. 图论期末复习(《图论机器应用》——朴月华)
  18. 入门学习duilib的要点
  19. linux怎样将文件夹设置共享,Linux操作系统下共享文件夹设置方法介绍
  20. 关于mysql 联表使用count的一个问题

热门文章

  1. 遭遇Crash文件战:教你如何搞定iOS崩溃日志
  2. linux查询数据库oracle端口,Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口...
  3. A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising 论文阅读笔记
  4. 计算机毕业设计JavaVue.js网上书城管理系统设计与实现服务端(源码+系统+mysql数据库+lw文档)
  5. git设置代理多账号
  6. java typehint_Java客户端 Hints说明
  7. 设计模式 - 行为型 - 模板模式学习
  8. MySQL 5.7-8.9.4 Index Hints
  9. 检测手机电池状态的代码
  10. 《算法零基础100讲》(第28讲) 递推问题