Flutter - Riverpod Future Provider:发生错误时如何保留旧数据

Pal*_*dro 2 flutter flutter-provider riverpod flutter-riverpod

这是我的用例:

  1. 数据已下载

    final dataProvider = FutureProvider<MyModel>((ref) async { 
        return fetchData(); 
    });
    
    Run Code Online (Sandbox Code Playgroud)

它在小部件的构建方法中像这样使用:

  ref.watch(dataProvider).when(
    data: DataWidget(data), 
    error: ErrorWidget(), 
    loading: LoadingWidget())
Run Code Online (Sandbox Code Playgroud)
  1. 用户可以选择刷新数据:

    ref.refresh(dataProvider.future);
    
    Run Code Online (Sandbox Code Playgroud)

但是,当出现错误时(例如手机处于飞行模式),会提供错误,因此 DataWidget 会丢失并替换为 ErrorWidget...有没有办法使用 Riverpod 来提供/保留现有数据而不是错误?我相信这是常见的情况,但我没有找到解决这个问题的任何优雅的解决方案。我也阅读了文档,但没有找到与此相关的任何有用信息。我错过了什么吗?(我是 Riverpod 的新手)谢谢

Rém*_*let 6

刷新时保留以前的数据是 2.0.0 的一部分行为。
尽管您可能遇到了一些错误。确保您使用的是 2.1.3 或更高版本,这应该可以解决与此相关的所有问题。

至于用于when显示以前的数据/错误,您可以使用各种标志:

asyncValue.when(
  // show previous data/error on loading
  skipLoadingOnReload: true,
  // show previous data if there's an error
  skipError: true,
  loading:...,
  data:...,
  error: ...,
)
Run Code Online (Sandbox Code Playgroud)