好的,所以基本上我有這個專案,我想為我的應用程式創建一個資料庫,所以我像往常一樣在我的專案中添加了 firebase 并創建了我的 database_service 檔案,但是如果 somoene 可以提供幫助,我會遇到這個錯誤一如既往 。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:have_to/model/todo.dart';
class DatabaseService{
CollectionReference todosCollection = FirebaseFirestore.instance.collection("Todos");
Future createNewTodo(String title) async{
return await todosCollection.add({
"title":title,
"isComplet":false,
});
}
Future completTask(uid)async{
await todosCollection.doc(uid).update({"isComplet":true});
}
List<Todo>? todoFromFirestore(QuerySnapshot snapshot){
if(snapshot != null){
snapshot.docs.map((e) {
return Todo(uid: e.id,
title: (e()["title"]),
isComplet: e()["isComplet"],);
}).toList();
}else{
return null;
}
}
Stream<List<Todo>> listTodos() {
return todosCollection.snapshots().map(todoFromFirestore);
}
}
uj5u.com熱心網友回復:
您的流如下所示:
Stream<List<Todo>> listTodos() {
return todosCollection.snapshots().map(todoFromFireStore);
}
這意味著它將轉到 firestore 并且對于每個檔案,它將運行todoFromFireStore并回傳一個待辦事項串列。
todoFromFirestore 看起來像這樣:
List<Todo>? todoFromFirestore(QuerySnapshot snapshot){
if(snapshot != null){
// some code
}
}
這里有三件重要的事情:
它回傳
List<Todo>?,這意味著它可以回傳空值,但您的流是型別Stream<List<Todo>>,這意味著它永遠不會有空值。這是您的錯誤到達的地方。查看方法上的代碼,如果
snapshot為 null ,則回傳null。snapshot是 aQuerySnapshot,它永遠不會為空,因為它的型別不是QuerySnapshot?。小事,但您錯過了在方法上添加 return 陳述句,因此無論如何它實際上總是回傳 null。
因此,如果洗掉 if 陳述句,則更改了回傳型別,并且實際上回傳了結果本身;錯誤將自行修復:
List<Todo> todoFromFirestore(QuerySnapshot snapshot){
return snapshot.docs.map((e) {
return Todo(uid: e.id,
title: (e()["title"]),
isComplet: e()["isComplet"],);
}).toList();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/388273.html
標籤:火力基地 扑 安卓工作室 谷歌云firestore
