2025年GlobalKey的使用方法

GlobalKey的使用方法第一种 当状态更新时 GlobalKey 不会丢失状态 GlobalKey 只有一种类型 它只和自己相等 定义 GlobalKey final globalKey GlobalKey GlobalKey 只能单独使用不能重复使用 不然会报 Duplicate GlobalKey detected in

大家好,我是讯享网,很高兴认识大家。

第一种:

当状态更新时,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, ), ), ); } }

小讯
上一篇 2025-03-22 16:09
下一篇 2025-03-25 20:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/39694.html