有没有办法让多个FutureBuilder从ChangeNotifier使用相同的将来?

时间:2019-08-26 18:40:39

标签: flutter dart

我有一个类(扩展了ChangeNotifier-提供程序包),该类具有返回Future的函数。我想做的是拥有它,以便我的UI代码中的多个futureBuilder可以从该函数接收值,而不必为每个FutureBuilder调用一次该函数。

但是,我使用的每个FutureBuilder都会一次又一次运行函数本身。我知道必须有一种方法可以通过Provider程序包公开Future本身,但我似乎还不知道该怎么做。

这是扩展ChangeNotifier并具有未来的类:

SPRING_PROFILES_ACTIVE

这是UI代码(它只是FutureBuilder):

cloud

我没有在小部件树中的“顶层”包含MultiProvider,因为我不明白为什么要这么做。我没有为CurrencyTicker类添加模型。如有必要,我可以提供这两种方式。

在这里将不胜感激

1 个答案:

答案 0 :(得分:1)

您不想直接在使用者的build方法内部进行HTTP调用。

您应该公开一个属性,而不是在ChangeNotifier上公开方法:

class MyNotifier with ChangeNotifier {
  Future<Foo> foo;
}

foo是一个变量,用于存储上一次fetchData调用的结果。

根据您的需要,您可以:

  • 如果需要立即在构造函数中调用fetchData
class MyNotifier with ChangeNotifier {
  MyNotifier() {
    foo = fetchData();
  }
  Future<Foo> foo;
}
  • 使用自定义获取器延迟加载它:
class MyNotifier with ChangeNotifier {
  Future<Foo> _foo;
  Future<Foo> get foo => _foo ??= fetchData();
}