Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Flatter上的gridview将1项硬编码添加到列表中的最后一个索引中_Gridview_Flutter_Items_Hardcode - Fatal编程技术网

如何使用Flatter上的gridview将1项硬编码添加到列表中的最后一个索引中

如何使用Flatter上的gridview将1项硬编码添加到列表中的最后一个索引中,gridview,flutter,items,hardcode,Gridview,Flutter,Items,Hardcode,我有很多JSON数据,超过8个数据。我想显示来自JSON的7个数据和1个硬代码数据(用于“更多”功能)。我设法显示了JSON中的7个数据,如下所示 但是,如何在我创建的框中使用硬编码数据添加最后1个数据/索引 这是我用来显示数据的函数 Widget _cardCategory(AsyncSnapshot<CatlistResult> snapshot) { var numItems = snapshot == null ? 0 : snapshot.data.catlist

我有很多JSON数据,超过8个数据。我想显示来自JSON的7个数据和1个硬代码数据(用于“更多”功能)。我设法显示了JSON中的7个数据,如下所示

但是,如何在我创建的框中使用硬编码数据添加最后1个数据/索引

这是我用来显示数据的函数

Widget _cardCategory(AsyncSnapshot<CatlistResult> snapshot) {
    var numItems = snapshot == null ? 0 : snapshot.data.catlist.sublist(1, 8).length;
    return Card(
      elevation: 5.0,
      shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(5))),
      margin: EdgeInsets.all(20.0),
      child: GridView.builder(
        shrinkWrap: true,
        itemCount: numItems,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
        itemBuilder: (BuildContext context, int index) {
          return GestureDetector(
            child: Card(
              elevation: 0.0,
              child: Column(
                children: <Widget>[
                  Expanded(
                    child: Image.asset('assets/images/main/cat_${snapshot.data.catlist[index].a}.png', fit: BoxFit.cover),
                  ),
                  Text(
                    snapshot.data.catlist[index].c,
                    style: TextStyle(fontSize: 10),
                  ),
                ],
              ),
            ),
          );
        },
      ),
    );
  }
Widget\u卡片类别(异步快照快照){
var numItems=snapshot==null?0:snapshot.data.catlist.sublist(1,8).length;
回程卡(
标高:5.0,
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径.圆形(5)),
裕度:所有边缘集(20.0),
子项:GridView.builder(
收缩膜:对,
itemCount:numItems,
gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:4),
itemBuilder:(构建上下文,int索引){
返回手势检测器(
孩子:卡片(
标高:0.0,
子:列(
儿童:[
扩大(
子项:Image.asset('assets/images/main/cat_${snapshot.data.catlist[index].a}.png',fit:BoxFit.cover),
),
正文(
snapshot.data.catlist[index].c,
样式:TextStyle(字体大小:10),
),
],
),
),
);
},
),
);
}
我从电报组的Flatter社区得到了一个参考,来自Rodrigo Lopez,这是代码

Widget _cardCategory(AsyncSnapshot<CatlistResult> snapshot) {
    var numItems = snapshot == null ? 0 : snapshot.data.catlist.sublist(1, 8).length;
    return Card(
      elevation: 5.0,
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(5))),
      margin: EdgeInsets.all(20.0),
      child: numItems == 0
          ? Container()
          : GridView.builder(
        shrinkWrap: true,
        itemCount: numItems + 1,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
        itemBuilder: (BuildContext context, int index) {
          String imagePath;
          String itemText;
          if (index == (numItems+1)) {
            imagePath = 'assets/images/main/cat_999.png';
            itemText = 'More';
          } else {
            imagePath = 'assets/images/main/cat_${snapshot.data.catlist[index].a}.png';
            itemText = snapshot.data.catlist[index].c;
          }
          return GestureDetector(
            child: Card(
              elevation: 0.0,
              child: Column(
                children: <Widget>[
                  Expanded(
                    child: Image.asset(imagePath, fit: BoxFit.cover),
                  ),
                  Text(
                    itemText,
                    style: TextStyle(fontSize: 10),
                  ),
                ],
              ),
            ),
          );
        },
      ),
    );
  }
Widget\u卡片类别(异步快照快照){
var numItems=snapshot==null?0:snapshot.data.catlist.sublist(1,8).length;
回程卡(
标高:5.0,
形状:RoundedRectangleBorder(borderRadius:borderRadius.all(Radius.circular(5)),
裕度:所有边缘集(20.0),
子项:numItems==0
?容器()
:GridView.builder(
收缩膜:对,
itemCount:numItems+1,
gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:4),
itemBuilder:(构建上下文,int索引){
字符串图像路径;
字符串项文本;
如果(索引==(numItems+1)){
imagePath='assets/images/main/cat_999.png';
itemText='更多';
}否则{
imagePath='assets/images/main/cat${snapshot.data.catlist[index.a}.png';
itemText=snapshot.data.catlist[index].c;
}
返回手势检测器(
孩子:卡片(
标高:0.0,
子:列(
儿童:[
扩大(
子项:Image.asset(imagePath,fit:BoxFit.cover),
),
正文(
项目文本,
样式:TextStyle(字体大小:10),
),
],
),
),
);
},
),
);
}
如果我运行这个代码,结果如下:


最后一个索引(8)不是来自硬编码,而是来自索引8中的JSON。那么,我如何从硬编码中调用1项以显示在列表GridView的最后一个索引(8)中呢?

基本上,您需要执行以下操作:

List items=snapshot.data.catlist.sublist(0,7);//从列表中选择前7项
//在末尾添加一个新项目,如果需要,使用其他项目的格式
items.add({
“imagePath”:”http://myimage.url',
....
});

您只需更改电报组代码中颤振社区中的if语句

无论列表大小如何,这都会将硬编码内容放在列表的最后。重要事项:保持

itemCount: numItems + 1, //+1 is important

在上面的例子中,你能用我的代码来写你的代码吗?谢谢,兄弟,它已经修复了,但是我没有在if语句中使用.length,因为它已经在var numItems中调用了。
 if (index == numItems) 
itemCount: numItems + 1, //+1 is important