flutter - 如何在 flutter 中将嵌套的 JSON api 响应显示为 GridView ?

标签 flutter flutter-layout

我正在使用 Flutter 构建应用程序。我想显示一个 GridView ,在该 GridView 中我想要一个数据 ListView 。我有一个 JSON Api,它的响应是这样的。

它是一个对象数组。我想在 gridview 中显示对象的标题和价格属性,并在该 gridview 的 ListView 中显示服务属性。我正在使用 Futurebuilder。我很困惑在 Futurebuilder 中我应该使用 gridview.count 还是 gridviewbuilder。要实现 ListView ,我应该在 gridviewbuildergridview.count 下使用 ListViewbuilder 吗?还有其他想法可以实现这一目标吗?

     "title": "EXPRESS 2",
     "price": 500,
     "services": [
       {
         "_id": "5ca07706e8f4c521f0010567",
         "serviceId": "5c9081e3ae535e0c549fa0fe",
         "name": "DENT SECTION"
       },
       {
         "_id": "5ca07706e8f4c521f0010566",
         "serviceId": "5c90820aae535e0c549fa100",
         "name": "ELECTRICAL SYSTEM"
       }
     ],
     "id": "5ca07706e8f4c521f0010565"
   },```







最佳答案

GridView.count:创建一个可滚动的二维小部件数组,在横轴上具有固定数量的图 block

GridView.builder:创建可滚动的二维小部件数组,这些小部件按需创建。

所以使用 GridView.builder

并尝试使用此代码绑定(bind)您的数据

 GridView.builder(
      shrinkWrap: true,
      itemCount: itemDataList.length,
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,childAspectRatio: 0.6),
      itemBuilder: (BuildContext context, int index){
        return Card(
          elevation: 6.0,
          child: Column(
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Center(
                child: Text(itemDataList[index].title),
              ),

              displayItem("id ", itemDataList[index].id),
              displayItem("price ", itemDataList[index].price.toString()),
              ListView.builder
                (
                  physics: NeverScrollableScrollPhysics(),
                  shrinkWrap: true,
                  itemCount: itemDataList[index].services.length,
                  itemBuilder: (BuildContext ctxt, int indx) {
                    return new Column(
                      mainAxisSize: MainAxisSize.max,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Divider(
                          height: 2,
                          color: Colors.black,
                        ),
                        displayItem("_Id", itemDataList[index].services[indx].sId),
                        displayItem("Service Id", itemDataList[index].services[indx].serviceId),
                        displayItem("Service name", itemDataList[index].services[indx].name),
                      ],
                    );
                  }
              ),
            ],
          ),
        );
      },
    ),
  )



Widget displayItem(String key, String value){
    return Padding(
      padding: const EdgeInsets.all(2.0),
      child: Text('$key : $value', style: TextStyle(fontSize: 11),),
    );
  }

关于flutter - 如何在 flutter 中将嵌套的 JSON api 响应显示为 GridView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55482804/

相关文章:

flutter - 在 Dart (Flutter) 中将两个 "yield"并排放置,只有第二个被执行

flutter - 如何在 CustomPaint 中去除多余的形状?

flutter - 在模式底部工作表上方显示SnackBar

android - Flutter - 如何在 `snackbar` 中显示 `Future`

android - 在多个模拟器上运行 flutter 应用程序

flutter - Flutter:将值分配给const color时出错

android - flutter 热重载在我的设备上不起作用

flutter - 如何在 Flutter 中创建从左到右或从上到下叠加的飞溅动画

flutter - 我如何检测小部件在呈现之前是否会溢出其约束?

dart - 如何在 ListTile 中添加 AlertDialog