Как исправить «Необработанное исключение: плохое состояние: не удается получить поле в DocumentSnapshotPlatform, которого не существует»?

#firebase #flutter

# #firebase #трепещет

Вопрос:

У меня есть функция, которая получает значение из firebase перед переходом на другую страницу. К сожалению, я получаю эту ошибку «Необработанное исключение: плохое состояние: не удается получить поле в DocumentSnapshotPlatform, которого не существует» при вызове функции. Однако, если я перезагружаю свое приложение, функция вызывается, и значение есть. У вас, ребята, есть идеи, как я могу это исправить?

вот функция:

   Future<void> getDeliveryPrice(String profileId) async {
    final DocumentSnapshot doc = await storeRef.doc(profileId).get();

    final price = doc['delPrice'] as num;

    deliveryPrice = price;
    print(profileId);

    notifyListeners();
  }
 

И здесь я вызываю функцию:

   PriceCard(
     buttonText: 'Continuar para a Entrega',
     onPressed: cartManager.isCartValid
         ? () {
            cartManager.getDeliveryPrice(profileId);
            print(profileId);

             Navigator.push(
                  context, MaterialPageRoute(
             builder: (context) => AddressScreen(profileId),
             ));
            } : null,
          )
 

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

1. doc.data()['delPrice'] as num; , я не знаю, есть ли здесь разница. но я думаю, вы должны получить его .data() .. И какова версия pakacge вашего cloud_firestore?

2. doc имеет тип DocumentSnapshot , у него есть метод data() , который возвращает карту с полями и значениями документа

3. Я уже пробовал это, но это не работает. Функция работает без data() но только в том случае, если я перезагружаю приложение, но когда я вызываю его, это не так.

Ответ №1:

Проверьте эту проблему на GitHub. В нем говорится, что ошибка связана с недавними изменениями DocumentSnapshot . Раньше были данные doc , но теперь doc.data() они есть.

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

1. спасибо за ваш ответ, Микаэль, я уже пробовал это, но это не работает. Функция работает без data() , но только если я перезагружаю приложение, но когда я его вызываю, это не так.

2. Вероятно, это потому, что вы не прослушиваете обновления. Используйте либо Consumer / Selector widget, либо context.watch<T>() функцию.

Ответ №2:

Я нашел проблему, profileId которая отсутствовала.