Ошибка Riverpod StreamProvider: слишком много позиционных аргументов: 1 разрешено, но 2 найдено. Попробуйте удалить дополнительные позиционные аргументы

#flutter #provider #stream-builder #riverpod

#flutter #поставщик #stream-builder #riverpod

Вопрос:

Я изучаю flutter и только что обновил приложение, чтобы включить Riverpods. У меня есть коллекция внутри коллекции, и поэтому мне нужно передать два параметра. Один называется localAuthId, а другой — OrgID .

Когда я настраиваю Streambuilder, я получаю сообщение об ошибке, в котором говорится, что слишком много позиционных аргументов.

Вот фрагмент, который, по-видимому, вызывает проблему

 **final orgStreamProvider =
StreamProvider.autoDispose.family<Org, String>((ref, localAuthId, orgId) {
  final database = ref.watch(databaseProvider);
  return database != null amp;amp; localAuthId != null amp;amp; orgId !=null
      ? database.orgDocStream(localAuthId: localAuthId, orgId: orgId)
      : const Stream.empty();
})**
  

Когда я запускаю следующее в коллекции верхнего уровня, т.Е. Только с 1 параметром localAuthId, это работает просто отлично.

 **final orgStreamProvider =
StreamProvider.autoDispose.family<Org, String>((ref, localAuthId) {
  final database = ref.watch(databaseProvider);
  return database != null amp;amp; localAuthId != null
      ? database.orgDocStream(localAuthId: localAuthId)
      : const Stream.empty();
});**
  

Кто-нибудь знает, что я с этим не так, пожалуйста?

Спасибо

Ответ №1:

На данный момент вы можете передать поставщику только одно значение, используя семейство 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 amp;amp; auth.localAuthId != null amp;amp; auth.orgId !=null
    ? database.orgDocStream(localAuthId: auth.localAuthId, orgId: auth.orgId)
    : const Stream.empty();
})
  

С помощью hooks_riverpod

 final orgProvider = useProvider(orgStreamProvider(auth));
  

Комментарии:

1. Большое вам спасибо за помощь в этом. Я попробовал это, но, к сожалению, мне все еще не удалось заставить это работать, поэтому я выбрал другой метод. Ценю вашу помощь