#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. Большое вам спасибо за помощь в этом. Я попробовал это, но, к сожалению, мне все еще не удалось заставить это работать, поэтому я выбрал другой метод. Ценю вашу помощь