在某些需求下,我们需要获取Widget
的大小或位置信息。但Widget
对象本身没有大小及位置数据,那么想要拿到Widget
的大小及位置信息,就需要通过与Widget
对象相关联的RenderBox
对象来获取。
下面就开始来获取Widget
的大小与位置。
1、获取RenderBox对象
要想获取RenderBox
对象,其实很简单。只需要调用BuildContext
的findRenderObject
方法即可。代码如下。
//context是一个BuildContext对象
RenderBox renderBox = context.findRenderObject();
但有时候,并不能顺利的拿到BuildContext
对象,那该怎么办尼?这时候就需要给Widget
对象设置一个Key,然后根据这个Key来拿到BuildContext
对象,从而获取RenderBox
对象,代码如下。
class MyHomePageState extends State<MyHomePage> {
//定义一个key
GlobalKey _key = GlobalKey();
_getRenderBox() {
//获取`RenderBox`对象
RenderBox renderBox = _key.currentContext.findRenderObject();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Column(
children: <Widget>[
Flexible(
flex: 2,
child: Container(
//设置key
key: _key,
color: Colors.red,
),
),
],
),
);
}
}
但在使用的时候,我们会发现如