我正在学习颤动,并且刚刚更新了应用程序以包括Riverpods。我在一个集合中有一个集合,因此需要传递两个参数。一个叫做localAuthId,另一个叫做orgId。
设置Streambuilder时出现错误,提示位置参数过多。
这似乎是导致问题的代码段
**final orgStreamProvider =
StreamProvider.autoDispose.family<Org, String>((ref, localAuthId, orgId) {
final database = ref.watch(databaseProvider);
return database != null && localAuthId != null && orgId !=null
? database.orgDocStream(localAuthId: localAuthId, orgId: orgId)
: const Stream.empty();
})**
当我在顶级集合上运行以下代码时,即仅使用localAuthId的一个参数,就可以正常工作。
**final orgStreamProvider =
StreamProvider.autoDispose.family<Org, String>((ref, localAuthId) {
final database = ref.watch(databaseProvider);
return database != null && localAuthId != null
? database.orgDocStream(localAuthId: localAuthId)
: const Stream.empty();
});**
请问有人知道我怎么了吗?
谢谢
答案 0 :(得分:2)
到目前为止,您只能使用Riverpod的family将一个值传递给提供程序。最好创建一个具有两个属性的类,然后将该对象传递给提供程序。
class Auth {
Auth({
@required this.localAuthId,
@required this.orgId,
});
final String localAuthId;
final String orgId;
}
final auth = Auth(localAuthId: 'abc', orgId: 'abc1234');
final orgStreamProvider = StreamProvider.autoDispose.family<Org, Auth>((ref, auth) {
final database = ref.watch(databaseProvider);
return database != null && auth.localAuthId != null && auth.orgId !=null
? database.orgDocStream(localAuthId: auth.localAuthId, orgId: auth.orgId)
: const Stream.empty();
})
使用hooks_riverpod
final orgProvider = useProvider(orgStreamProvider(auth));