我是靠谱客的博主 闪闪香水,最近开发中收集的这篇文章主要介绍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);

  @override
  State<MyCounter> createState() => _MyCounterState();
}

class _MyCounterState extends State<MyCounter> {
  int _counter = 0;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 100,
      width: 100,
      color: Colors.orange,
      child: TextButton(
        onPressed: () {
          setState(() {
            _counter++;
          });
        },
        child: Text(
          _counter.toString(),
          textScaleFactor: 3,
        ),
      ),
    );
  }
}

最后

以上就是闪闪香水为你收集整理的GlobalKey的使用方法第一种:第二种:的全部内容,希望文章能够帮你解决GlobalKey的使用方法第一种:第二种:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部