如何在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
相关产品推荐
相关产品推荐

