【问题标题】:How can I update the value in FutureProvider with riverpod?如何使用 Riverpod 更新 FutureProvider 中的值?
【发布时间】:2022-10-19 21:58:36
【问题描述】:

我有一个带有项目列表的 FutureProvider。如何在不刷新提供程序的情况下更新此列表中的项目?

【问题讨论】:

    标签: flutter dart riverpod


    【解决方案1】:

    您应该为您的列表使用 StateNotifierProvider,如下所示:

    final listProvider = StateNotifierProvider<ListItem, dynamic>((ref) {
      return ListItem([]);
    });
    
    class ListItem extends StateNotifier<dynamic> {
      ListItem(List<dynamic> items) : super(items);
      void update(dynamic item) {
         // Your update logic. You have access to the use with 'state' variable
      }
    }
    

    在此之前,您使用您未来的回复填充listProvider。此外,您应该将dynamic 类型更改为列表中的对象类型

    【讨论】:

    • 是的,但我想使用 futureProvider 能够使用 ref.watch(myFutureProvider).when(data: data, error: error, loading: loading) 并更新状态而无需再次刷新和获取数据。
    • 使用另一个 FutureProvider 接收您的更新怎么样?您等待原始提供者,但获取更新后的状态。
    【解决方案2】:

    您可以从FutureProvider的创建功能中获取您需要的数据。这将在otherProvider 的每次更新时执行。所以你需要做的就是更新这个otherProvider 值,你的未来会自动刷新。

     late final FutureProvider<List<String>> allStrings = FutureProvider((ref) {
          var aNewValue = ref.watch(otherProvider);
          return _externalService.getMyStringsFromSomewhere();
      });
    

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 2021-12-24
      • 1970-01-01
      • 2021-03-23
      • 2022-07-28
      • 2022-12-14
      • 2022-08-14
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多