簡體   English   中英

使用列表 flutter firestore 過濾數據

[英]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 列表時獲得這些列表的名稱和圖像? (編輯:我將按鈕轉換為列表視圖並添加了數據庫圖像)

[1]: https://i.stack.imgur.com/APYOL.png

我不確定我是否正確理解了這個問題,但是如果你問的是如何收集所有擁有那些最喜歡的書的 ID 的書(例如你的 favBooks 列表),我認為這樣的單一查詢是不可能的. 我的建議是在用戶的 FS 數據庫中創建附加字段。 (假設您有用戶集合)在此集合中,您將用戶存儲為具有唯一 ID 的文檔,為每個用戶創建額外的字段 FavBooks,這將是對書籍的引用列表。 每次用戶將一本書標記為他的最愛時,您都會在用戶文檔中將對該書的引用添加到此文件中。 之后,您可以簡單地創建一個查詢 select 此列表中的所有書籍引用。

代替

.where("bookId", isEqualTo: favBooks[0])

我用了

.where("bookId", whereIn: favBooks)

它奏效了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM