![](/img/trans.png)
[英]Flutter Firestore : Add a List of Data to Firestore Document
[英]filter data using list flutter firestore
我正在創建一個書店,其中擁有自己喜歡的書的顧客有一個 favBook 列表,該網站顯示他們所有喜歡的書的名稱和圖像。 這本書 model 看起來像這樣:
class BookModel
{
String? bookImage;
String? bookName;
String ? bookId;
BookModel({ this.bookImage, this.bookName,this.bookId});
//data from server
factory BookModel.fromMap(map)
{
return BookModel(
bookImage: map['bookImage'],
bookName: map['bookName'],
bookId: map['bookId'],
);
}
// data to server
Map<String, dynamic> toMap(){
return{
'bookImage': bookImage,
'bookName': bookName,
'bookId':bookId,
};
}
}
現在,我已經在主頁上創建了一個帶有 bookId 的字符串列表,並調用了我的 BookModel 並存儲了一個可用的書籍列表,如下所示:
List<String> favBooks = ["C8n4Tjwof7RhIspC7Hs","Hc3hTsWkg9vHwGN37Jb"];
List<BookModel> bookList = [];
@override
void initState()
{
super.initState();
FirebaseFirestore.instance
.collection("books")
.where("bookId", isEqualTo: favBooks[0])
.get()
.then((value){
if (value != null && value.docs.isNotEmpty) {
bookList = value.docs.map((doc) => BookModel.fromMap(doc.data())).toList();
setState(() {
});
} else {
}
});
}
然后在我的構建小部件中,我這樣調用書單:
final books= ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: favBooks.length,
itemBuilder: (BuildContext context,int index)
{
return ListTile(
leading: Ink.image(
image: NetworkImage(bookList[0].bookImage.toString()),
height: 70,
width: 70,
),
title: Text(bookList[0].bookName.toString()),
);
}
);
這是我的數據庫的樣子:
[![enter image description here][1]][1]
我現在面臨的問題是,在我的 where 子句中,當我執行 favBooks[0] 時,它會顯示數據,但我想顯示書籍,現在只顯示一本書。 我嘗試執行 favBooks 以獲取 favBook 列表中兩本書的書名和圖像,但它不起作用。 我該怎么做才能在傳遞圖書 ID 列表時獲得這些列表的名稱和圖像? (編輯:我將按鈕轉換為列表視圖並添加了數據庫圖像)
我不確定我是否正確理解了這個問題,但是如果你問的是如何收集所有擁有那些最喜歡的書的 ID 的書(例如你的 favBooks 列表),我認為這樣的單一查詢是不可能的. 我的建議是在用戶的 FS 數據庫中創建附加字段。 (假設您有用戶集合)在此集合中,您將用戶存儲為具有唯一 ID 的文檔,為每個用戶創建額外的字段 FavBooks,這將是對書籍的引用列表。 每次用戶將一本書標記為他的最愛時,您都會在用戶文檔中將對該書的引用添加到此文件中。 之后,您可以簡單地創建一個查詢 select 此列表中的所有書籍引用。
代替
.where("bookId", isEqualTo: favBooks[0])
我用了
.where("bookId", whereIn: favBooks)
它奏效了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.