FutureProvider 的用例
Posted
技术标签:
【中文标题】FutureProvider 的用例【英文标题】:Use case for FutureProvider 【发布时间】:2019-12-12 10:51:48 【问题描述】:我想知道FutureProvider
类存在什么用例?
我对如何在使用FutureProvider
、ChangeNotifierProvider
或类似的东西构建 ui 时加载像 Future<Contact> getAllContacts() async ...
这样的异步函数特别感兴趣。
此外,每次调用notifyListeners()
时,我希望该提供程序通过异步调用重建ui。提供者是否可以这样做,还是我错过了什么?
【问题讨论】:
【参考方案1】:FutureProvider
没有内置更新机制,但可以与Consumer
和可变对象(ChangeNotifer
或State
)结合来处理更新。
它有两个主要用途:
公开需要异步加载的“不可变值”(例如配置文件):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 的用例的主要内容,如果未能解决你的问题,请参考以下文章
使用上下文和观察更改模型时,Flutter Provider 不会触发重建
Flutter Riverpod:如何实现 FutureProvider?
cudaGraphicsGLRegisterImage中cudaGraphicsRegisterFlagsWriteDiscard的用例是啥?