问题描述
我正在尝试从此网址获取 json 当我打印响应体时,它会打印在控制台上,但是当我尝试在 Future Builder 中获取一些值时,它会出现此错误
Future getData() async {
var url =
'https://v6.exchangerate-api.com/v/68553894467/latest/USD';
var response = await http.get(url);
var responsebody = jsonDecode(response.body);
return (responsebody);
}
@override
void initState() {
getData();
super.initState();
}
Future OLs() async {
await Future.delayed(Duration(seconds: 2));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('test'),),body: Refreshindicator(
onRefresh: OLs,child: FutureBuilder(
future: getData(),builder: (buildcontext,AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemBuilder: (context,i) {
return Container(
child:
Text(snapshot.data[i]["time_last_update_utc"]));
},itemCount: snapshot.data.length,);
}
}),));
}
}
解决方法
就连接状态未完成而言,我们不应该从未来构建器的快照中看到数据,以下代码将解决问题
builder: (buildcontext,AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
return ListView.builder(
itemBuilder: (context,i) {
return Container(
child:
Text(snapshot.data[i]["time_last_update_utc"]));
},itemCount: snapshot.data.length,);
} else {
return CircularProgressIndicator();
}
}