按文档使用Flutter Riverpod的StateNotifierProvider出现类型错误
错误原因
你没有为StateNotifierProvider显式声明泛型参数,Dart的类型推导无法自动识别完整的类型结构,最终推断出的dynamic类型和你期望的List<Food>不匹配,才触发了赋值异常。
修复方案
定义provider时显式指定两个泛型参数:
- 第一个泛型参数:你自定义的
StateNotifier子类类型,即SelectedFoodsNotifier - 第二个泛型参数:该Notifier管理的状态数据类型,即
List<Food>
修改后的provider代码如下:
final selectedFoodsProvider = StateNotifierProvider<SelectedFoodsNotifier, List<Food>>((ref) => SelectedFoodsNotifier());
修改后重新运行即可消除报错,你原来的watch(selectedFoodsProvider)写法是正确的,会直接拿到List<Food>类型的状态数据;如果后续需要调用add/remove等Notifier内的方法,使用watch(selectedFoodsProvider.notifier)拿到Notifier实例即可。
额外排查项
如果修改后仍有报错,可以排查两个常见问题:
- 确认
Food类已经被正确导入到provider定义的文件中 - 确认两个泛型参数的顺序没有写反,状态类型要放在第二个参数位
- 检查provider返回的类名是否和你定义的
SelectedFoodsNotifier完全一致,没有拼写错误
内容的提问来源于stack exchange,提问作者pedroremedios
相关产品推荐
相关产品推荐

