Ошибка при попытке получить данные из Firestore - PullRequest
0 голосов
/ 12 апреля 2020

, когда я пытаюсь получить данные из пожарного магазина с этим кодом.

Future<String> getUserType() async {
        await (Firestore.instance
            .collection('users')
            .document(getUserUID().toString())
            .get()
            .then((DocumentSnapshot ds) {
          return ds['type'];
        }));
      }

я получаю эту ошибку

 NoSuchMethodError: The method '[]' was called on null.
 I/flutter (15824): Receiver: null
 I/flutter (15824): Tried calling: []("type")

Я также пытался:

return ds.data['type'];

Код для извлечения UID пользователя:

Future<String> getUserUID() async {
    return (await _firebaseAuth.currentUser()).uid;
  }

но я не думаю, что это проблема, может быть, в ds нет ничего.

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Сначала необходимо получить userID, а затем использовать его при извлечении документа:

Future<String> getUserType() async {
String userID = (await _firebaseAuth.currentUser()).uid;
        await (Firestore.instance
            .collection('users')
            .document(userID)
            .get()
            .then((DocumentSnapshot ds) {
          return ds['type'];
        }));
      }

В вашем коде:

Future<String> getUserUID() async {
    return (await _firebaseAuth.currentUser()).uid;
  }

getUserUID() возвращает a Future, но когда вы делаете .document(getUserUID().toString()), вы не получаете результат этого Future.

Проверьте следующее:

https://dart.dev/codelabs/async-await

0 голосов
/ 12 апреля 2020

Ваш метод getUserUID () возвращает строку Future String, а не обычную строку. Так что вы не можете напрямую получить документ, предоставив это. Это обычный способ реализации такой функции.

Future<String> getUserType() async {
 getUserUID().then((currentUser) {
  if (currentUser != null) {
    await (Firestore.instance
        .collection('users')
        .document(currentUser)
        .get()
        .then((DocumentSnapshot ds) {
      return ds['type'];
    }));
   }
   }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...