如何在 Flutter 中将 FutureBuilder 与 Provider 结合使用,而无需在每次构建时重新计算 Future?

问题描述 投票:0回答:1

我正在使用 Flutter 并尝试使用 FutureBuilder 根据 Provider 包管理的状态来获取数据。我面临的挑战是我的未来取决于我可以通过

Provider.of<MyData>(context)
进入的状态。

问题来了:

  1. 我需要在小部件的构造函数中初始化 Future,但由于构造函数无权访问构建上下文,因此我无法从提供程序检索状态。
  2. 如果我尝试在构建方法中创建 Future,每次小部件重建时都会重新计算,这对于性能来说并不理想。

我目前的方法:

class MyWidget extends StatelessWidget {
  final Future<DataType> future;

  MyWidget() : future = fetchData(); // This can't access context

  @override
  Widget build(BuildContext context) {
    final myData = Provider.of<MyData>(context); // Need to use myData here

    // Creating the Future here causes it to recompute on every build
    final future = fetchDataBasedOn(myData);

    return FutureBuilder<DataType>(
      future: future,
      builder: (context, snapshot) {
        // Build your widget based on snapshot
      },
    );
  }
}

我的问题: 如何以只计算一次的方式管理 Future,并且仍然能够访问提供者的状态?是否有推荐的模式可以使用 Flutter 的 FutureBuilder 和 Provider 来实现这一目标?

任何建议或示例将不胜感激!

flutter dart
1个回答
0
投票

您可以使用 init() 方法来管理未来,它只计算一次,您也可以访问提供者状态。

© www.soinside.com 2019 - 2024. All rights reserved.