#flutter #flutter-layout
#flutter #flutter-layout
Вопрос:
Я создаю приложение с использованием flutter. Я хочу показать gridview, а внутри этого gridview мне нужен listview данных. У меня есть JSON Api, ответ которого выглядит следующим образом.
Это массив объекта. Я хочу показать свойство title и price объекта в gridview и свойство services внутри listview в этом gridview. Я использую Futurebuilder
. Я не уверен, следует ли использовать внутри Futurebuilder gridview.count
или gridviewbuilder
. Для достижения listview я должен использовать ListViewbuilder
под этим gridviewbuilder
или gridview.count
? Есть другие идеи для достижения этого?
"title": "EXPRESS 2",
"price": 500,
"services": [
{
"_id": "5ca07706e8f4c521f0010567",
"serviceId": "5c9081e3ae535e0c549fa0fe",
"name": "DENT SECTION"
},
{
"_id": "5ca07706e8f4c521f0010566",
"serviceId": "5c90820aae535e0c549fa100",
"name": "ELECTRICAL SYSTEM"
}
],
"id": "5ca07706e8f4c521f0010565"
},```
Ответ №1:
GridView.count
: Создает прокручиваемый 2D-массив виджетов с фиксированным количеством плиток на поперечной оси
и
GridView.builder
: Создает прокручиваемый 2D-массив виджетов, которые создаются по запросу.
So use the GridView.builder
и попробуйте этот код для привязки ваших данных
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),),
);
}