簡體   English   中英

snapshot.data.docs.length 不適用於 flutter

[英]snapshot.data.docs.length not working on flutter

我做了一些列表視圖,它有喜歡和評論部分。 我想顯示該帖子有多少喜歡和評論。 類似部分通過顯示喜歡它的用戶數量來工作,我嘗試使用 firestore 中的snapshot.data.docs.length.toString()來顯示它,但是當我嘗試顯示與類似部分具有相同代碼的評論數量時,它不會工作,只得到 0。

這是評論區里面這是在我的 firestore 里面,評論區

Padding(
    padding: const EdgeInsets.only(top: 8),
    child: Padding(
      padding: const EdgeInsets.only(left: 15),
      child: Row(
        mainAxisAlignment:
            MainAxisAlignment.spaceEvenly,
        children: [
          Container(
            width: 80.0,
            child: Row(
              mainAxisAlignment:
                  MainAxisAlignment.start,
              children: [
                GestureDetector(
                  onLongPress: () {
                    Provider.of<PostFunction>(context,
                            listen: false)
                        .showLikes(
                            context,
                            documentSnapshot
                                .data()['title']);
                  },
                  onTap: () {
                    print('Adding like...');
                    Provider.of<PostFunction>(context,
                            listen: false)
                        .addLike(
                            context,
                            documentSnapshot
                                .data()['title'],
                            Provider.of<AuthenticationService>(
                                    context,
                                    listen: false)
                                .getUserUid);
                  },
                  child: Icon(
                    FontAwesomeIcons.arrowAltCircleUp,
                    color: kGreyColor,
                    size: 18.0,
                  ),
                ),
                StreamBuilder<QuerySnapshot>(
                    stream: FirebaseFirestore.instance
                        .collection('posts')
                        .doc(documentSnapshot
                            .data()['title'])
                        .collection('likes')
                        .snapshots(),
                    builder: (context, snapshot) {
                      if (snapshot.connectionState ==
                          ConnectionState.waiting) {
                        return Center(
                            child:
                                CircularProgressIndicator());
                      } else {
                        return Padding(
                          padding:
                              const EdgeInsets.only(
                                  left: 8.0),
                          child: RichText(
                            text: TextSpan(
                                text: snapshot
                                    .data.docs.length
                                    .toString(),
                                style: GoogleFonts
                                    .openSans(
                                        color:
                                            kGreyColor,
                                        fontSize: 16.0),
                                children: <TextSpan>[
                                  TextSpan(
                                      text: ' votes',
                                      style: GoogleFonts
                                          .openSans(
                                        color:
                                            kGreyColor,
                                        fontSize: 16.0,
                                      )),
                                ]),
                          ),
                        );
                      }
                    })
              ],
            ),
          ),
          SizedBox(width: 20),
          Container(
            width: 150.0,
            child: Row(
              mainAxisAlignment:
                  MainAxisAlignment.start,
              children: [
                GestureDetector(
                  onTap: () {
                    Provider.of<PostFunction>(context,
                            listen: false)
                        .showComments(
                            context,
                            documentSnapshot,
                            documentSnapshot
                                .data()['title']);
                  },
                  child: Icon(
                    FontAwesomeIcons.solidComments,
                    color: kGreyColor,
                    size: 16.0,
                  ),
                ),
                StreamBuilder<QuerySnapshot>(
                    stream: FirebaseFirestore.instance
                        .collection(' posts')
                        .doc(documentSnapshot
                            .data()['title'])
                        .collection('comments')
                        .snapshots(),
                    builder: (context, snapshot) {
                      if (snapshot.connectionState ==
                          ConnectionState.waiting) {
                        return Center(
                            child:
                                CircularProgressIndicator());
                      } else {
                        return Padding(
                          padding:
                              const EdgeInsets.only(
                                  left: 8.0),
                          child: Text(
                            snapshot.data.docs.length
                                .toString(),
                            style: GoogleFonts.openSans(
                                color: kGreyColor,
                                fontSize: 16.0),
                          ),
                        );
                      }
                    }),
              ],
            ),
          ),
          Spacer(),
          Provider.of<AuthenticationService>(context,
                          listen: false)
                      .getUserUid ==
                  documentSnapshot.data()['useruid']
              ? IconButton(
                  icon: Icon(EvaIcons.moreVertical,
                      color: kGreyColor, size: 16),
                  onPressed: () {
                    Provider.of<PostFunction>(context,
                            listen: false)
                        .showPostOptions(
                            context,
                            documentSnapshot
                                .data()['title']);
                  })
              : Container(width: 0.0, height: 0.0)
        ],
      ),
    ),
  ),

Replace.collection('posts')

with.collection('posts')

在 Streambuilder 的“評論”部分。

您的 stream 數據為空,因為數據庫找不到具有名稱的集合(“帖子”)。 因此,當您嘗試使用與“喜歡”部分相同的代碼顯示該帖子有多少評論時,它不起作用,每次只能得到 0。

只需聲明生成器的數據類型 arguments.. 我的意思是,生成器:(BuildContext 上下文,AsyncSnapshot 快照)。 檢查圖像

你能試試這個嗎?

StreamBuilder(
  stream: firestoreDB,
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if (!snapshot.hasData) {
      return Center(child: CircularProgressIndicator());
    }
    return ListView.builder(
      itemCount: snapshot.data!.size,
      itemBuilder: (context, index) {
        return Card(
          child: ListTile(
            title: Text(snapshot.data!.docs[index]['name']),
            subtitle: Text(snapshot.data!.docs[index]['description']),
          ),
        );
      },
    );
  },
),

暫無
暫無

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

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