flutter 如何在局部widget获得根节点MaterialApp的RenderBox
要在局部widget中获得根节点MaterialApp的RenderBox,可以使用GlobalKey和BuildContext。
首先,在MaterialApp中设置一个GlobalKey:
class MyApp extends StatelessWidget {
final GlobalKey appKey = GlobalKey();
@override
Widget build(BuildContext context) {
return MaterialApp(
key: appKey,
...
);
}
}
然后,在需要获得RenderBox的局部widget中,使用BuildContext和GlobalKey来获取RenderBox:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final RenderBox box = context.findRenderObject() as RenderBox;
final RenderBox appBox = MyApp().appKey.currentContext.findRenderObject() as RenderBox;
final Offset offset = box.localToGlobal(Offset.zero, ancestor: appBox);
...
}
}
这里使用了BuildContext的findRenderObject方法来获取局部widget的RenderBox,然后使用GlobalKey的currentContext属性来获取MaterialApp的BuildContext,从而获取MaterialApp的RenderBox。最后,使用localToGlobal方法将局部widget的坐标转换为相对于MaterialApp的坐标
原文地址: https://www.cveoy.top/t/topic/c8ph 著作权归作者所有。请勿转载和采集!