Метод был вызван при нулевом значении с помощью DocumentSnapshot и Firestore.

В основном мне нужно сохранить в списке поля коллекции в базе данных firestore.

Это виджет, который заботится о подключении к базе данных:

Future<DocumentSnapshot> MissionRetriever1() async{
    return await FirebaseFirestore.instance
        .collection("quest")
        .doc("1")
        .get();
    }

И это виджет, содержащийся в другом файле, который заботится о сохранении различных данных в списке:

 Future<void> getMission1() async{
    DocumentSnapshot snap = await widget.mservice.MissionRetriever1();
      Map<String,dynamic> data = snap.data();
      setState(() {
      MissionData1.add(data['Q_Category']);
      MissionData1.add(data['Q_Name']);
      MissionData1.add(data['Q_Description']);
      MissionData1.add(data['Q_Score']);
      MissionData1.add(data['Q_Target']);
    });
  }

Но когда я пытаюсь отобразить значение внутри списка в текстовом виджете следующим образом:

Text(MissionData1.isEmpty ?  "Loading..." : MissionData1[1],
                                  style: TextStyle(
                                      fontWeight: FontWeight.bold,
                                      fontFamily: 'Roboto',
                                      color: const Color(0xFF3A404C),
                                      fontSize: 14.0.sp),),

Он всегда остается в: Загрузка... и возвращает эту ошибку:

E/flutter ( 3639): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The method 'MissionRetriever1' was called on null.
E/flutter ( 3639): Receiver: null
E/flutter ( 3639): Tried calling: MissionRetriever1()

Это коллекция Firestore:

Firestore

Это метод инициализации:

@override
  void initState() {
    super.initState();
    asyncMethod();
  }

  void asyncMethod() async {
    **await getMission1();**
    await widget.auth.retrieveScore();
    **await widget.mservice.MissionRetriever1();**
    await widget.mservice.NumberGenerator();
  }

И это инициализация списка: **List<String> MissionData1 = [];**

P.S. Глядя на журналы Firestore, в соединении не было отказано.


person Matteo Grondona    schedule 22.01.2021    source источник
comment
Ошибка, которой вы поделились, просто означает, что ваш mservice - это null. Это должно быть первое, что вам нужно проверить.   -  person João Soares    schedule 22.01.2021


Ответы (1)


Измените свой метод MissionRetriever1() и посмотрите, сможете ли вы восстановить данные.

return FirebaseFirestore firestore = FirebaseFirestore.instance
.collection('quest')
.doc("1")
.get()
.then((DocumentSnapshot documentSnapshot) {
  if (documentSnapshot.exists) {
    print('Document data: ${documentSnapshot.data()}');
  } else {
    print('Document does not exist on the database');
  }
});
person Lucas Baggio    schedule 22.01.2021
comment
Я пробовал, но при отладке ничего не печатается - person Matteo Grondona; 23.01.2021
comment
@MatteoGrondona, если вы поместите только оператор печати, будет ли он напечатан? Я думаю, что это не проблема firestore, возможно, это проблема потока кода. - person Jan Hernandez; 25.01.2021