flutter获取widget位置
时间: 2023-09-06 13:14:12 浏览: 249
Flutter中获取Widget位置可以使用`GlobalKey`和`BuildContext`。
1. 使用`GlobalKey`
使用`GlobalKey`可以获取到一个Widget在屏幕上的位置。首先需要在需要获取位置的Widget上定义一个`GlobalKey`,然后通过`GlobalKey`获取到该Widget的位置信息。
```dart
class MyWidget extends StatelessWidget {
final GlobalKey _globalKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Container(
key: _globalKey,
child: Text('Hello, World!'),
);
}
void getPosition() {
RenderBox box = _globalKey.currentContext.findRenderObject() as RenderBox;
Offset position = box.localToGlobal(Offset.zero);
print('x: ${position.dx}, y: ${position.dy}');
}
}
```
在上面的代码中,我们首先定义了一个`GlobalKey`,然后将其赋值给一个`Container`的`key`属性。在`getPosition`方法中,我们通过`_globalKey.currentContext.findRenderObject()`获取到该Widget的渲染对象,然后使用`localToGlobal`方法将该对象的位置转换为全局位置。
2. 使用`BuildContext`
如果您只需要获取Widget在屏幕上的位置,而不是具体的坐标位置,您可以使用`BuildContext`。您可以使用`MediaQuery`获取到屏幕的大小,然后使用`BuildContext`获取到Widget的位置信息。
```dart
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Builder(
builder: (context) {
Size screenSize = MediaQuery.of(context).size;
final RenderBox renderBox = context.findRenderObject() as RenderBox;
final size = renderBox.size;
final topLeftPosition = renderBox.localToGlobal(Offset.zero);
final bottomRightPosition = renderBox.localToGlobal(Offset(size.width, size.height));
return Container(
color: Colors.blue,
);
},
);
}
}
```
在上面的代码中,我们在`Builder`中使用`BuildContext`获取到Widget的渲染对象,并使用`localToGlobal`方法获取到该对象的位置信息。最后,我们使用`MediaQuery`获取到屏幕的大小信息,并使用该信息计算出Widget的左上角和右下角的位置信息。
阅读全文