Flutter context.findRenderObject() 返回 null

Sco*_*ttF 3 widget dart flutter

我正在尝试根据小部件的大小执行一些手势运动逻辑。

为了获得大小,我在构建方法中调用以下代码......

final RenderBox renderBox = context.findRenderObject();
Run Code Online (Sandbox Code Playgroud)

有时会返回 null?

是什么导致这个返回 null?有没有更可靠的方法来获取 Widget 的大小?

Mig*_*ivo 6

您需要确保小部件当前正在渲染(例如,在屏幕上),或者在尝试访问它之前给它一个渲染时间,例如,initState()如果这是来自有状态小部件,则通过在您的系统上调用它:

WidgetsBinding.instance.addPostFrameCallback(() {
   final RenderBox renderBox = context.findRenderObject();
});
Run Code Online (Sandbox Code Playgroud)

  • 如果它是动态的,那么在绘制它之前你不能获得“大小”。但是您可以在第一帧之后获得它,这意味着您最多在获得大小之前丢失一帧。 (3认同)