我得到一個“NoSuchMethodError: The method 'get' was called on null. Receiver: null Tried call: 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),
uj5u.com熱心網友回復:
.then()塊中的代碼異步運行。當您呼叫calendarLogs.get('legPressReps')它時它可能沒有完成,如果沒有完成,那么calendarLogs仍然是null。
一個快速的解決方法是calendarLog?.get('legPressReps'),但是你需要一些狀態管理setState來確保你通知你的構建器它更改為非空的事實。
查看什么是 Future 以及如何使用它?了解如何在您的應用程式中正確處理異步行為。
uj5u.com熱心網友回復:
嘗試改變這一行:
label: Text(calendarLogs.get('legPressReps') ?? 0),
用這一行:
label: Text(calendarLogs["legPressReps"]) ?? 0),
如果它不起作用,請嘗試同時更改此行:
calendarLogs = docs.docs[0];
用這一行:
calendarLogs = docs.docs[0].data();
如果仍然不起作用,您將需要共享您的代碼getCalendarLog和資料庫中的快照
在此鏈接中查看有關如何QuerySnapshot 作業的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340230.html
標籤:数据库 火力基地 扑 镖 谷歌云firestore
上一篇:'User?'型別的值無法從“_userFromFirebaseUser”方法回傳,因為它的回傳型別為“User”
