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

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