NoSuchMethodError:在 Flutter 中使用 Dart 和 Firestore 调用了方法“get”

Posted

技术标签:

【中文标题】NoSuchMethodError:在 Flutter 中使用 Dart 和 Firestore 调用了方法“get”【英文标题】:NoSuchMethodError: The method 'get' was called on null in Flutter using Dart with Firestore 【发布时间】:2021-12-13 05:49:37 【问题描述】:

我收到“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),

【问题讨论】:

这能回答你的问题吗? What is a NoSuchMethod error and how do I fix it? 【参考方案1】:

尝试更改此行:

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

用这一行:

label: Text(calendarLogs["legPressReps"]) ?? 0),

如果不起作用,请尝试更改此行:

calendarLogs = docs.docs[0];

用这一行:

calendarLogs = docs.docs[0].data();

如果仍然无法正常工作,您需要共享此 getCalendarLog 的代码和数据库中的快照

在link 中查看更多关于QuerySnapshot 工作原理的信息。

【讨论】:

请不要胡乱猜测。【参考方案2】:

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

快速修复是calendarLog?.get('legPressReps'),但您需要使用setState 进行一些状态管理,以确保通知您的构建者它已更改为非空值。

查看What is a Future and how do I use it?,了解如何在您的应用程序中正确处理异步行为。

【讨论】:

以上是关于NoSuchMethodError:在 Flutter 中使用 Dart 和 Firestore 调用了方法“get”的主要内容,如果未能解决你的问题,请参考以下文章

NoSuchMethodError,小部件库捕获的异常

颤振和json:NoSuchMethodError:方法'[]'在null上被调用

Firebase 身份验证,错误:NoSuchMethodError:在 null 上调用了方法“登录”

未处理异常:DatabaseException(Error Domain=FMDatabase Code=26 "file is not a database"。更新到 Flutt

NoSuchMethodError:在 null 上调用了方法 '[]' - Flutter

NoSuchMethodError:方法 'ancestorStateOfType' 在 null 上被调用