概述
第一种:
当状态更新时,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的使用方法第一种:第二种:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复