Flutter / Firestore - FutureBuilder вызывает ошибку NoSuchMethodError даже после нулевых проверок

Я пытаюсь получить значения из своей базы данных Firestore. Я использую FutureBuilder для создания виджета, которому требуются эти значения. Следующие коды вызывают у меня ошибки:

FutureBuilder(
          future: Firestore.instance.collection('Users').document(_uid).get(),
          builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
            if (snapshot.hasData) {
              if (snapshot.data != null) {
                print(snapshot.data["firstName"]); //error occurs here
              }
            } else {
              return new CircularProgressIndicator();
            }
          },
        )

Ошибка выглядит следующим образом: NoSuchMethodError: The method '[]' was called on null. Receiver: null Tried calling: []("firstName") Так или иначе, моментальный снимок документа все еще является нулевым даже после нулевых проверок. Есть идеи, почему? Еще более странно: код действительно работает при горячей перезагрузке. Однако, когда я переключаюсь на эту страницу в своем приложении, эта ошибка появляется снова. Я попытался реализовать try-catch, который возвращает CircularProgressIndicator, однако страница просто остается постоянным CircularProgressIndicator при обнаружении ошибки. Думаю, это можно решить, если я поймаю ошибку и перезагружу FutureBuilder. Либо так, либо если бы я мог разгадать загадку, почему моментальный снимок документа является нулевым даже после нулевых проверок.

* Обновлено: я обнаружил проблему: _uid вызывает у меня проблемы. Когда я жестко кодирую _uid, он работает хорошо. Таким образом, проблема заключается в том, как я получаю свой _uid в начале страницы. Вот как я получаю свой _uid, написанный прямо над моими кодами сборки:

void initState()  {
    super.initState();
    // Listen for our auth event (on reload or start)
    // Assign variables once logged in
    _auth.onAuthStateChanged
        .firstWhere((user) => user != null)
        .then((user) {
      _uid = user.uid;
      print (_uid);
    });
  }
Tried calling: []("firstName") выглядит иначе, чем ваш код выше. Вы уверены, что это не вызвано другим кодом? Попробуйте запустить flutter clean в терминале в каталоге вашего проекта, возможно, некоторые изменения кода не отражаются в работающем приложении.
Günter Zöchbauer 25.07.2018 07:46

Я запустил флаттер без ошибок, но проблема все еще не устранена. Я напечатал операторы вокруг кода, поэтому я уверен, что "print (snapshot.data [" firstName "])" вызывает у меня проблемы.

Amanda Wong 26.07.2018 11:14
Укрывает ли JavaScript ошибку с самого начала?
Укрывает ли JavaScript ошибку с самого начала?
Typeof(null) → Ошибка в том, что он возвращает тип Object, в то время как ожидается, что он вернет тип null. Эта ошибка - ситуация, пришедшая из...
2
2
503
0

Другие вопросы по теме