Flutter 复杂解析 Json Undefined getter "List<Type>'
Flutter Complex Parsing Json Undefined getter "List<Type>'
我正在尝试将一个复杂的 json 文件解析到我的应用程序中,但出现错误: getter 'name' 没有为类型 'List' 定义.我无法在我的路线列表中获取路线名称,但可以获取其他所有内容。
我不明白这是哪里发生的以及如何解决它。
我的代码:
void openBottomSheet() {
showModalBottomSheet(
context: context,
builder: (context) {
return FutureBuilder<DriverDataModel>(
future: mongoApi.getMongoData(),
builder: (context, snapshot) {
if (snapshot.hasData) {
final driver = snapshot.data;
return Container(
child: ListView.builder(
itemCount: driver.data.routes.length,
itemBuilder: (BuildContext context, snapshot) {
return ListTile(
title: Text('${driver.data.routes.name}'),
leading: Icon(Icons.directions),
onTap: () {
drawPolyLine.cleanPolyline();
getCurrentLocation();
routesCoordinates.isInCourse(driver.data.routes);
Navigator.pop(context);
},
);
},
),
);
}
return Container();
},
);
});
Json 回复:
{
"success": true,
"data": {
"_id": "600773ac1bde5d10e89511d1",
"name": "Joselito",
"truck": "5f640232ab8f032d18ce0137",
"phone": "*************",
"routes": [
{
"name": "Tere city",
"week": [
{
"short_name": "mon"
}
],
"coordinates": [
{
"lat": -22.446938,
"lng": -42.982084
},
{
"lat": -22.434384,
"lng": -42.978511
}
]
}
],
"createdAt": "2021-01-20T00:05:00.717Z",
"updatedAt": "2021-01-20T00:05:00.717Z",
"__v": 0
}
我使用 https://app.quicktype.io/ 创建我的模型并成功解析。然而,当我试图在我的路线列表中打印我的路线名称时,出现 getter 错误。
routes是一个数组,你可以试试driver.data.routes[0].name
调用
@fartem 几乎回答正确,除了你需要通过索引动态访问你的项目(不仅仅是第一个项目)。在代码中,在 ListView.builder
中使用函数 itemBuilder
而不是
itemBuilder: (BuildContext context, snapshot) {
我建议使用
itemBuilder: (BuildContext context, i) {
因为第二个参数是一个索引。因此,为了能够获取列表中每个项目的名称,您必须使用该索引:
title: Text('${driver.data.routes[i].name}'),
等等。
我正在尝试将一个复杂的 json 文件解析到我的应用程序中,但出现错误: getter 'name' 没有为类型 'List' 定义.我无法在我的路线列表中获取路线名称,但可以获取其他所有内容。 我不明白这是哪里发生的以及如何解决它。
我的代码:
void openBottomSheet() {
showModalBottomSheet(
context: context,
builder: (context) {
return FutureBuilder<DriverDataModel>(
future: mongoApi.getMongoData(),
builder: (context, snapshot) {
if (snapshot.hasData) {
final driver = snapshot.data;
return Container(
child: ListView.builder(
itemCount: driver.data.routes.length,
itemBuilder: (BuildContext context, snapshot) {
return ListTile(
title: Text('${driver.data.routes.name}'),
leading: Icon(Icons.directions),
onTap: () {
drawPolyLine.cleanPolyline();
getCurrentLocation();
routesCoordinates.isInCourse(driver.data.routes);
Navigator.pop(context);
},
);
},
),
);
}
return Container();
},
);
});
Json 回复:
{
"success": true,
"data": {
"_id": "600773ac1bde5d10e89511d1",
"name": "Joselito",
"truck": "5f640232ab8f032d18ce0137",
"phone": "*************",
"routes": [
{
"name": "Tere city",
"week": [
{
"short_name": "mon"
}
],
"coordinates": [
{
"lat": -22.446938,
"lng": -42.982084
},
{
"lat": -22.434384,
"lng": -42.978511
}
]
}
],
"createdAt": "2021-01-20T00:05:00.717Z",
"updatedAt": "2021-01-20T00:05:00.717Z",
"__v": 0
}
我使用 https://app.quicktype.io/ 创建我的模型并成功解析。然而,当我试图在我的路线列表中打印我的路线名称时,出现 getter 错误。
routes是一个数组,你可以试试driver.data.routes[0].name
@fartem 几乎回答正确,除了你需要通过索引动态访问你的项目(不仅仅是第一个项目)。在代码中,在 ListView.builder
中使用函数 itemBuilder
而不是
itemBuilder: (BuildContext context, snapshot) {
我建议使用
itemBuilder: (BuildContext context, i) {
因为第二个参数是一个索引。因此,为了能够获取列表中每个项目的名称,您必须使用该索引:
title: Text('${driver.data.routes[i].name}'),
等等。