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

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

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

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

【问题讨论】:

    标签: flutter dart async-await flutter-provider


    【解决方案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 因为一旦发布了不可为空的类型,这将停止工作
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2021-11-15
    • 1970-01-01
    • 2022-08-14
    • 2022-10-19
    • 2020-11-11
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多