database - 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),
解决方案
块中的代码.then()
异步运行。调用时它可能尚未完成calendarLogs.get('legPressReps')
,如果尚未完成,则calendarLogs
仍然是null
.
一个快速的解决方法是calendarLog?.get('legPressReps')
,但是你需要一些状态管理setState
来确保你通知你的构建器它改变为非空值的事实。
看看什么是未来以及如何使用它?了解如何在您的应用程序中正确处理异步行为。
推荐阅读
- html - 最大宽度替代方案
- python - 在 pyspark 中获取执行者任务的任务 ID
- mysql - 基于年份的两个日期之间的MYSQL Datediff
- javascript - TypeError: 无法删除 # 的属性 'Symbol(@xml.js.parent)'
- javascript - 在父 div 中滚动子 div
- android - 启用缩小时 Gradle 构建失败
- reactjs - 更新状态时出错(跳过状态的构造函数)
- c - 从程序集 x86 32 位调用 c 函数时未定义的引用
- android - 带有 Proguard 的 Android Swagger 客户端
- selenium - 无法使用硒右键单击新选项卡中的选项打开链接