首页 > 解决方案 > NoSuchMethodError:在 Flutter 中使用 Dart 和 Firestore 调用了方法“get”

问题描述

我收到“NoSuchMethodError:在 null 上调用了方法 'get'。接收方:null 尝试调用:get("legpressReps")”

这是我的日历日志类,它根据输入的特定运动名称和时间访问文档。

class CalendarLog {
 getCalendarLog(String sportName, Timestamp date) {
 return FirebaseFirestore.instance
.collection('users')
    .where('sport', isEqualTo: sportName)
    .get();
}
}

这是我覆盖 initState 以访问具有运动名称“举重”且日期设置为 10-27-2021 的文档的地方

bool calendarLogFlag = false;
var calendarLogs;
@override
void initState(){
super.initState();

DateTime date1 = DateTime.utc(2021, 10, 27);
Timestamp date = Timestamp.fromDate(date1);
CalendarLog().getCalendarLog('weightlifting', date).then((QuerySnapshot docs){
if(docs.docs.isNotEmpty){
  calendarLogFlag  = true;
  calendarLogs = docs.docs[0];
}
});

当我们尝试在主页中显示数据字段时,我们尝试访问它的方式如下:

label: Text(calendarLogs.get('legPressReps') ?? 0),

标签: databasefirebaseflutterdartgoogle-cloud-firestore

解决方案


块中的代码.then()异步运行。调用时它可能尚未完成calendarLogs.get('legPressReps'),如果尚未完成,则calendarLogs仍然是null.

一个快速的解决方法是calendarLog?.get('legPressReps'),但是你需要一些状态管理setState来确保你通知你的构建器它改变为非空值的事实。

看看什么是未来以及如何使用它?了解如何在您的应用程序中正确处理异步行为。


推荐阅读