Как изменить код для создания потока типа Stream <dynamic>для построителя потоков? - PullRequest
1 голос
/ 02 августа 2020

Inside Stream Builder, он просит меня поставить Stream<builder>, иначе выдается ошибка,

type 'Future<dynamic>' is not a subtype of type 'Stream<dynamic>'

Теперь, поскольку я следил за этим ответом , Мне пришлось закодировать поток примерно так:

getGroupsOfUser() async {
    String _userID = await _getUID();
    DocumentSnapshot userInfo = await userCollection.document(_userID).get();
    return groupCollection.where(FieldPath.documentId, whereIn: userInfo.data['groups']).snapshots();
  }

Теперь я знаю, может быть, если я смогу преодолеть использование asyn c, я могу это исправить, но мне нужно получить uid и массив групп, который функция asyn c, и я не могу назначить их как переменные, иначе я получаю сообщение об ошибке only static members can be accessed in initializers

Пожалуйста, кто-нибудь, помогите мне, я очень новичок в этом.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

getGroupsOfUser() должен возвращать Stream, поскольку snapshots() возвращает Stream. Поэтому вам необходимо сделать следующее:

Stream<QuerySnapshot> getGroupsOfUser() async* {
    String _userID = await _getUID();
    DocumentSnapshot userInfo = await userCollection.document(_userID).get();
    yield* groupCollection.where(FieldPath.documentId, whereIn: userInfo.data['groups']).snapshots();
  }

Поскольку вам нужно вернуть поток, вам нужно использовать async* и использовать ключевое слово yield* для возврата.

1 голос
/ 02 августа 2020

Ошибка должна быть из строки

return groupCollection.where(FieldPath.documentId, whereIn: userInfo.data['groups']).snapshots();

Поскольку метод .snapshots () возвращает Stream вместо Future, и поскольку ваш getGroupsOfUser () является Future, он выдает ошибку, которую вы не может вернуть Stream из функции, которая возвращает Future.

Мое решение: 1 - Поместите logi c для получения userID и userInfo внутри initState (), т.е. создайте для него Future. 2 - Отделите последнюю строку от Future и оберните ее StreamBuilder после успешного получения информации о пользователе с шага 1.

...