首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用Firebase实现GridView无效距离误差?

如何利用Firebase实现GridView无效距离误差?
EN

Stack Overflow用户
提问于 2022-03-10 08:58:59
回答 2查看 131关注 0票数 0

我试图创建GridView,它为FutureBuilder返回Card Widget,我在Firebase中有两个字段。

GridView的itemCount: 6

但是在Firebase中有两个字段。所以,我也是这样的:

我怎么才能解决这个问题?

FutureBuilder代码被剪短:

代码语言:javascript
运行
复制
FutureBuilder(
                future: collectionRef.get(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if (snapshot.hasData && snapshot.data != null) {
                    if (snapshot.data!.docs.isNotEmpty) {
                      return GridView.builder(
                        gridDelegate:
                            const SliverGridDelegateWithFixedCrossAxisCount(
                          crossAxisCount: 3,
                        ),
                        physics: const BouncingScrollPhysics(),
                        itemCount: 6,
                        itemBuilder: (BuildContext context, int index) {
                          Map<String, dynamic> docData =
                              snapshot.data!.docs[index].data();
                          if (docData.isEmpty) {
                            return const Text("empty");
                          }
                          String timeSlot = docData['timeSlot'];

                          return Card();
                        },
                      );
                    } else {
                      return const Text("error");
                    }
                  } else {
                    return CircularProgressIndicator();
                    // const LoadingWidget1(height: 50);
                  }
                },
              ),
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-10 09:23:02

项取决于snapshot数据长度。

替换

代码语言:javascript
运行
复制
itemCount: 6,

使用

代码语言:javascript
运行
复制
itemCount: snapshot.data?.length,

它将提供需要在GridView上构建的确切数据长度。

在处理空数据时创建6个项

代码语言:javascript
运行
复制
itemCount: 6,
  itemBuilder: (c, index) {
    if (index < snapshot.data!.length) {
      //perform any index operation here
      return Card(
        color: Colors.grey,
      );
    } else {
      // you cant perform because data doesnt exit on this index
      /// Map<String, dynamic> docData =
      // snapshot.data!.docs[index].data();
      return const Card(
        color: Colors.yellow,
      );
    }

演示小部件

代码语言:javascript
运行
复制
body: FutureBuilder<List<int>>(
    future: Future.delayed(Duration(seconds: 3))
        .then((value) => List.generate(02, (i) => i)),
    builder: (c, snapshot) {
      if (snapshot.hasData &&
          snapshot.connectionState == ConnectionState.done) {
        return GridView.builder(
          gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 3,
          ),
          itemCount: 6,
          itemBuilder: (c, index) => index < snapshot.data!.length
              ? Container(
                  color: Colors.green,
                  child: Text(
                    "${snapshot.data![index]}",
                  ),
                )
              : Container(
                  color: Colors.red,
                  child: Text("Empty Box"),
                ),
        );
      }

      /// handle others snapshot-state 
      return CircularProgressIndicator();
    },
  ),
票数 0
EN

Stack Overflow用户

发布于 2022-03-10 09:30:16

必须将itemCount指定为Firebase中可用字段的计数。

您的Firebase数据库中有两个字段,并且要进行计数6。

将您的itemCount替换为:

代码语言:javascript
运行
复制
itemCount: snapshot.data!.docs.length,
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71421362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档