json - Flutter:当我尝试访问 JSON 数据的元素时出现 TypeError
问题描述
我正在尝试在动态列表视图上显示 JSON 数据的各个元素。但是,我不断收到“类型'int'不是类型'String'的子类型”错误,我不知道为什么。
如果我在 buildFlightsColumn 函数中位于 Row 下的小部件中仅包含 left() 函数,则该代码有效。但是一旦我包含了 middle() 和 right() 函数,我就会得到错误。
Widget buildListView() {
print(data);
return ListView.builder(
itemCount: data == null ? 0 : data.length,
itemBuilder: (context, index) {
return buildFlightsColumn(data[index]);
}
);
}
Widget buildFlightsColumn(dynamic item) => Container(
height: 150.0,
decoration: BoxDecoration(
),
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
left(item['PlaceId']),
middle(item['IataCode']),
right()
],
),
);
Container left(dynamic item) {
return new Container (
child: Text(
item,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 25.0,
color: Colors.red,
)
),
);
}
Container middle(dynamic item) {
return new Container(
child: Text(
item,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 25.0,
color: Colors.red,
)
),
);
}
Container right() {
return new Container(
child: RaisedButton(
onPressed: () {
},
child: Text('Book Flights'),
)
);
}
传入 buildFlightsColumn 函数的数据是 API 请求返回的 JSON 数据:
[{PlaceId: 65368, IataCode: LAX, Name: Los Angeles International, Type: Station, SkyscannerCode: LAX, CityName: Los Angeles, CityId: LAXA, CountryName: United States}, {PlaceId: 81727, IataCode: SFO, Name: San Francisco International, Type: Station, SkyscannerCode: SFO, CityName: San Francisco, CityId: SFOA, CountryName: United States}]
解决方案
文本小部件不能显示 int s,它们只能解释 strings ,所以你的错误来自这段代码
Widget buildFlightsColumn(dynamic item) => Container(
height: 150.0,
decoration: BoxDecoration(
),
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
left(item['PlaceId']) // item['placeId'] is int,
middle(item['IataCode']),
right()
],
),
);
Container left(dynamic item) {
return new Container (
child: Text(
item, // here item is int, which is not allowed <-----------------------
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 25.0,
color: Colors.red,
)
),
);
}
.toString()
您可以使用该方法或字符串插值将其数字更改为字符串
Container left(dynamic item) {
return new Container (
child: Text(
item.toString(), // here item is String <-----------------------
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 25.0,
color: Colors.red,
)
),
);
}
推荐阅读
- docker - 'system' 不是 docker 命令。见“码头工人--帮助”
- excel - Range 类的 DataSeries 方法失败
- html - 是否有任何仅适用于 1366*768 横向设备的桌面媒体查询
- python - 使用 Sympy 进行集成时出现“无效语法”
- java - 保持和移动元件(窗口)
- node.js - aws上的redis如何在密钥到期时触发lambda?
- javascript - React Native AXIOS 方法 GET response.data 显示 null
- azure - 自动生成的 Azure can-shell-storage 帐户
- amazon-web-services - 什么是正确的 AWS::Glue::Job Connections 属性结构?
- c++ - 【MacOSX 10.15.1】使用odb生成数据库,致命错误:wchar.h: No such file or directory #include