如何向Riverpod的Foo类传递id参数?
问题解决:Riverpod Provider传递参数的正确方式
问题描述
定义了如下Riverpod类Foo:
@riverpod class Foo extends _$Foo { final String id; @override bool build() { return id == 'abc'; } }
尝试用ref.watch(fooProvider);获取值时,不知道如何向Foo传递id参数。
解决方法
你之前的写法有误,Riverpod中给Provider传递参数不能直接在类里定义成员变量,必须通过参数化Provider的方式,借助build方法的参数来实现,具体步骤如下:
1. 修改Provider类定义
把id作为build方法的参数,移除类中的成员变量:
@riverpod class Foo extends _$Foo { @override bool build(String id) { // 将id作为build方法的参数 return id == 'abc'; } }
2. 调用Provider时传递参数
使用ref.watch的时候,通过fooProvider(id: "目标id值")的形式传递参数:
// 示例:传递id为'abc' final fooValue = ref.watch(fooProvider(id: 'abc'));
原理说明
Riverpod的代码生成器会根据build方法的参数,自动生成支持参数传递的Provider构造器。直接在类中定义成员变量的方式,生成的Provider无法自动注入该变量,因此会导致参数无法传递的问题。
内容的提问来源于stack exchange,提问作者Nguyễn Đức Thành
相关产品推荐
相关产品推荐

