Riverpod StreamProvider错误:位置参数过多:允许1个,但是找到2个。尝试删除多余的位置参数

时间:2020-09-26 07:39:00

标签: flutter provider stream-builder

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

请问有人知道我怎么了吗?

谢谢

1 个答案:

答案 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));