【发布时间】:2021-06-14 06:12:35
【问题描述】:
我正在尝试根据小部件的大小进行一些手势运动逻辑。
为了获取大小,我在构建方法中调用了以下代码...
final RenderBox renderBox = context.findRenderObject();
这有时会返回 null?
是什么导致它返回 null?有没有更可靠的方法来获取 Widget 的大小?
【问题讨论】:
-
你给我的例子可以工作,但对于更高级的运动跟踪,我需要编写一个自定义类来封装要通知的额外数据(位置、上/下/拖动等)。此外,我必须在 CustomPainter 类中维护运动状态,并在 paint() 方法中执行运动逻辑。我只是希望有一个更优雅的解决方案。也许没有……
-
所以使用
LayoutBuilder但老实说,当您知道画布大小时,我不知道它对您有何帮助-无论如何,在GestureDetector检测到任何事件后,您都需要与CustomPaint交互-您如何想这样做吗? -
CustomPaint 和 GestureDetector 的公共父有状态小部件维护状态,GestureDetector 回调调用 setState。然后更改会反映在 CustomPaint 中。
-
因此,在检测到任何事件后,您将从头开始重建您的
CustomPainer- 例如,如果您有onPanUpdate,您的CustomPainter将每秒重建 20-30 次或更多次 -
是的,这就是我目前的做法。对我来说,基于我过去使用的框架,以及基于 Flutter 暴露的类,对我来说这样做的正确方法并不明显。