0

在屏幕最初加载后,我正在努力将异步数据绘制到 Flutter 画布中。我想知道构建我的工作流程以允许更新的最佳方式。

屏幕的整个生命周期如下所示:

1. An async request is performed using data from a class called ScreenData
2. We paint the canvas with result (initial load)
3. A notification comes in from a ScreenData provider (using ChangeNotifierProvider)
4. Perform async request with the new ScreenData object
4. Repaint canvas with result

我了解第 1、2 和 3 点的工作原理,第 3 和 4 点有点棘手。

该类ScreenData包含一些在异步调用中使用的简单数据,在绘制屏幕时需要其结果。

我被困在哪里

我可以通过Listenable listenable = Provider.of<ScreenData>(context, listen: true);以下函数确保在 ScreenData 更新时画布调用重绘:

class CanvasPainter extends CustomPainter {
  CanvasPainter({
    required Listenable listenable,
  }) : super(repaint: listenable);

  @override
  void paint(Canvas canvas, Size size) {
    // draw something
  }

  @override
  bool shouldRepaint(CustomPainter old) => true;
}

但是,我需要使用这个新ScreenData对象执行异步请求,然后paint才能调用另一个对象。我不知道把它放在哪里,因为paint需要同步。

有没有一种简单的方法可以确保我在paint调用之前预加载了所有数据?

4

0 回答 0