要在局部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的坐标

flutter 如何在局部widget获得根节点MaterialApp的RenderBox

原文地址: https://www.cveoy.top/t/topic/c8ph 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录