我想从一个复杂的json API中获取数据,并在Flutter的未来构建器中显示这些数据。
这是json的示例
{
"hours": [
{
"time": "2021-03-23T00:00:00+00:00",
"waveHeight": {
"icon": 1.35,
"meteo": 1.25,
"noaa": 1.28,
"sg": 1.25
}
},
{
"time": "2021-03-23T00:00:00+00:00",
"waveHeight": {
"icon": 1.35,
"meteo": 1.25,
"noaa": 1.28,
"sg": 1.25
}
},
],
}这是从API获取数据的函数
Future getJsonData() async {
String url2 =
'https://api.stormglass.io/v2/weather/point?lat=5.9774&lng=80.4288¶ms=waveHeight&start=2021-03-23&end2021-03-24';
String apiKey =
'0242ac130002-248f8380-7a54-11eb-8302-0242ac130002';
print('0');
Response response = await get(Uri.parse(url2),
headers: {HttpHeaders.authorizationHeader: apiKey});
final _extractedData = json.decode(response.body) as Map<String, dynamic>;
List<Wave> _data = [];
List<Wave> _fetchedData = [];
_extractedData['hours'].forEach((value) {
_fetchedData.add(Wave(
time: value['time'],
icon: value['icon'],
meteo: value['meteo'],
noaa: value['noaa'],
sg: value['sg'],
));
});
_data = _fetchedData;
print(_data);
return _data;
}数据在控制台打印,如下所示
/flutter ( 4879): [Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', Instance of 'Wave', In下面是未来的建造者
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("API"),
),
body: Container(
child: FutureBuilder(
future: getJsonData(),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data[0]['time']);
} else {
return CircularProgressIndicator();
}
}),
),
);
}当我运行应用程序时,显示以下错误
The following NoSuchMethodError was thrown building FutureBuilder<dynamic>(dirty, state: _FutureBuilderState<dynamic>#e19f8):
Class 'Wave' has no instance method '[]'.
Receiver: Instance of 'Wave'
Tried calling: []("time")下面是wave类
class Wave {
final String time;
final double icon;
final double meteo;
final double noaa;
final double sg;
Wave({
this.time,
this.icon,
this.meteo,
this.noaa,
this.sg,
});
factory Wave.fromJson(Map<String, dynamic> json) {
return Wave(
time: json['time'],
icon: json['icon'],
meteo: json['mateo'],
noaa: json['noaa'],
sg: json['sg']);
}
}我想获取数据并将其打印在flutter列表视图中
发布于 2021-05-03 16:42:21
这是因为您从getJsonData返回的数据不是地图,而是您创建的"WAVE“模型类。
基本上,要访问您的“时间”,您需要更改代码:
return Text(snapshot.data[0]['time']);至
return Text(snapshot.data[0].time);https://stackoverflow.com/questions/67365715
复制相似问题