FutureProvider 的用例

Posted

技术标签:

【中文标题】FutureProvider 的用例【英文标题】:Use case for FutureProvider 【发布时间】:2019-12-12 10:51:48 【问题描述】:

我想知道FutureProvider 类存在什么用例?

我对如何在使用FutureProviderChangeNotifierProvider 或类似的东西构建 ui 时加载像 Future<Contact> getAllContacts() async ... 这样的异步函数特别感兴趣。

此外,每次调用notifyListeners() 时,我希望该提供程序通过异步调用重建ui。提供者是否可以这样做,还是我错过了什么?

【问题讨论】:

【参考方案1】:

FutureProvider 没有内置更新机制,但可以与Consumer 和可变对象(ChangeNotiferState)结合来处理更新。

它有两个主要用途:

公开需要异步加载的“不可变值”(例如配置文件):
FutureProvider<MyConfig>(
  builder: (_) async 
    final json = await // TODO load json from something;
    return MyConfig.fromJson(json); 
  
)
或者,它可以与可以变异的东西(如ChangeNotifier)结合,将Future 转换为更容易操作的东西:
ChangeNotifierProvider(
  builder: (_) => Foo(),
  child: Consumer<Foo>(
    builder: (_, foo, __) 
      return FutureProvider.value(
        value: foo.someFuture,
        child: ...,
      );
    ,
  ),
);

【讨论】:

谢谢。我能够根据您的回答创建一个gist,允许在未来的操作正在进行时显示一个孩子。 Future 返回时有没有办法设置提供者? 有没有在MultiProvider 中使用这种模式的干净方法? 我很欣赏您开发的 Provider 包,但合理的逻辑让我无法理解为什么会有 FutureProvider 而不是“FutureChangeNotifierProvider”之类的东西。后者似乎是状态管理更常见的用例,尽管比前者更难实现。 @brianodgen 因为一旦发布了不可为空的类型,这将停止工作

以上是关于FutureProvider 的用例的主要内容,如果未能解决你的问题,请参考以下文章

使用提供者获取数据 onLoad

在angular中,provider,怎么使用

使用上下文和观察更改模型时,Flutter Provider 不会触发重建

Flutter Riverpod:如何实现 FutureProvider?

Scala 中流的用例

cudaGraphicsGLRegisterImage中cudaGraphicsRegisterFlagsWriteDiscard的用例是啥?