GlobalKey的使用方法
第一种:
当状态更新时,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的使用方法相关推荐
- flutter怎么手动刷新_flutter局部刷新的实现示例
局部刷新 我们在做项目的时候,都需要单独的去刷新一个值,而不是把整个界面都重绘.大家都知道setState是进行重绘的一个方法,他会执行生命周期的一个build,这将会使得整个界面来进行重绘.当然我们 ...
- 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群
作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...
- Java面试题大全2021版
一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...
- Flutter中的Key和GlobalKey
1.Key 参考:https://api.flutter.dev/flutter/widgets/Widget/key.html 控制一个widget该如何替换掉树中的另一个widget:如果两个wi ...
- flutter父组件调用子组件方法
Key 概念参考前端react和vue中key值的含义,如果列表key不更改,则即便数据又修改视图也没有更改. ValueKey:以一个值为key. ObjectKey:以一个对象为key. Uniq ...
- flutter 父组件调用子组件方法
子组件 子组件定义 GlobalKey<_ListRefreshRequestNewsState> globalKey = GlobalKey();, 定义方法 void getRefre ...
- Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...
- IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:
- IDEA自动生成对象所有set方法
idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...
最新文章
- 数据竞赛利器XGBoost常见面试题集锦
- 事情在不断的解决中,想念巫英才和张国振
- postgresql数据库安装及简单操作
- 草稿 前端开发 代码的编写习惯 缩进的意义 HTML的格式
- 语言 物品竞拍系统_整理家务不用愁!HSR家庭自主整理机器人系统
- 一篇文章教你学会如何使用CSS中的雪碧图(CSS Sprite)
- QT 用QAudio语音库实现音频信号的采集 以及发送到另一台电脑 播放
- Python学习笔记(六)——查询天气脚本
- php js 获取 客户端ip地址,JavaScript获取客户端IP的方法(新方法)
- github第一次使用--创建hello-world
- 前端Unicode字符图标汇总
- 目前国内汉语自动分词系统的研究现状
- Android UI开发神兵利器之设计资源
- Paul Graham:梦寐以求的编程语言
- 白岩松人生哲学-听后感
- tilemap 导入unity_Unity2019基础教程:TileMap搭建像素画场景关卡
- 图论期末复习(《图论机器应用》——朴月华)
- 入门学习duilib的要点
- linux怎样将文件夹设置共享,Linux操作系统下共享文件夹设置方法介绍
- 关于mysql 联表使用count的一个问题
热门文章
- 遭遇Crash文件战:教你如何搞定iOS崩溃日志
- linux查询数据库oracle端口,Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口...
- A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising 论文阅读笔记
- 计算机毕业设计JavaVue.js网上书城管理系统设计与实现服务端(源码+系统+mysql数据库+lw文档)
- git设置代理多账号
- java typehint_Java客户端 Hints说明
- 设计模式 - 行为型 - 模板模式学习
- MySQL 5.7-8.9.4 Index Hints
- 检测手机电池状态的代码
- 《算法零基础100讲》(第28讲) 递推问题