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

Riverpod v1稳定版StateProvider旧示例失效,新写法是否正确?

回答

你给出的适配Riverpod v1稳定版的改写代码可正常运行,核心适配逻辑完全正确。

适配正确性说明

Riverpod v1稳定版对StateProvider的取值、改值逻辑做了拆分调整,旧版0.x的API不再兼容:

  • 旧版中ref.watch(selectedProductIdProvider)返回的是StateController实例,所以需要额外访问.state才能拿到实际的状态值,也可以直接通过这个实例修改state
  • 新版中API做了职责拆分:
    • 仅监听状态值变化直接用ref.watch(selectedProductIdProvider),返回的就是你定义的泛型类型的状态值(示例里就是String?类型的选中商品ID),不需要再访问.state
    • 要修改状态需要单独通过ref.watch(selectedProductIdProvider.notifier)拿到StateController实例,再修改它的state属性

你的改写完全符合新版的API规则,运行不会出错。

可优化点

你代码中获取selectedProductIdController的逻辑用ref.read会更优:

// 因为StateController实例本身不会变化,不需要监听它的更新,用read性能更好
final selectedProductIdController = ref.read(selectedProductIdProvider.notifier);

你现有写法用ref.watch也不会触发异常,只是存在不必要的监听开销。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:05