You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter Riverpod中用switch表达式禁用skipLoadingOnRefresh

解决Riverpod中Switch表达式实现skipLoadingOnRefresh: false的问题

要在switch表达式中实现原when方法里skipLoadingOnRefresh: false的效果,核心是明确匹配**AsyncLoading状态**,无论它是否携带之前的数据(刷新场景下的AsyncLoading会包含previous属性)。

具体实现代码

switch (ref.watch(balanceProvider)) {
  case AsyncData(:final value):
    return Text(value.toString());
  case AsyncError():
    return const Text('error');
  case AsyncLoading():
    return const CircularProgressIndicator.adaptive();
}

原理说明

原when方法的skipLoadingOnRefresh: false作用是:即使之前已有数据,刷新时仍强制显示loading状态。对应的Riverpod状态逻辑是,刷新时会生成AsyncLoading(previous: AsyncData(...))对象。

通过在switch中明确匹配AsyncLoading分支,而非使用默认的_分支,就能直接覆盖所有loading场景(包括刷新时的loading),实现和skipLoadingOnRefresh: false完全一致的效果。

补充说明

如果使用默认的_分支,虽然也能匹配到AsyncLoading,但明确列出AsyncLoading分支会让代码逻辑更清晰,也避免后续新增AsyncValue子类时出现意外匹配的问题。

内容的提问来源于stack exchange,提问作者anas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:02:10