Flutter Riverpod使用ref.listen时StateProvider类型不匹配报错如何解决
Flutter Riverpod ref.listen类型不匹配报错修复方案
错误原因
报错核心是ref.listen指定的泛型与传入的可监听对象类型不匹配:
The argument type 'StateProvider' can't be assigned to the parameter type 'ProviderListenable
'.
StateProvider<T>默认对外暴露的可监听值是T类型的状态本身,而非StateController<T>实例。你代码中给ref.listen指定了StateController<LoginException>泛型,但传入的是直接暴露状态的loginExceptionProvider,因此触发类型校验失败。
修复方案
方案1(推荐):监听状态值(适配绝大多数业务场景)
仅需要监听LoginException状态变化触发副作用时,直接修改ref.listen的泛型为LoginException即可:
ref.listen<LoginException>(loginExceptionProvider, (prev, next) { ScaffoldMessenger.of(context) .showSnackBar(const SnackBar(content: Text('yoyo'))); });
方案2:监听StateController实例
如果你确实需要获取StateController实例调用相关操作方法,给传入的provider添加.notifier后缀即可匹配类型:
ref.listen<StateController<LoginException>>(loginExceptionProvider.notifier, (prev, next) { ScaffoldMessenger.of(context) .showSnackBar(const SnackBar(content: Text('yoyo'))); });
内容的提问来源于stack exchange,提问作者Mosh Mobile Software Engineer
相关产品推荐
相关产品推荐

