1

我正在学习颤振,并且刚刚更新了应用程序以包含 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();
});**

有谁知道我对此有什么问题吗?

谢谢

4

1 回答 1

2

到目前为止,您只能将一个值传递给使用Riverpod家族的提供者。最好创建一个具有两个属性的类并将对象传递给提供者。

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));
于 2020-09-27T03:03:38.293 回答