我正在尝试遍历List<ClassName>
,以便以后可以从中检索数据。
从Future<List<ClassName>> _getValues() async
函数内的json文件中检索数据。
问题是,当我启动应用程序时,我收到“RangeError(索引):无效值:有效值范围为空:-1”,但过了一会儿,屏幕显示了正确的信息。
我是Flutter的新手,但据我了解,迭代最初是通过一个空列表进行的。
这是我提到的功能:
Future<List<CountryData>> _getValues() async {
var countriesData = List<CountryData>();
var data = await http
.get("https://opendata.ecdc.europa.eu/covid19/casedistribution/json");
var jsonData = json.decode(data.body);
for (var i in jsonData["records"].toList()) {
countriesData.add(CountryData.fromJson(i));
}
return countriesData;
}这是我设置列表状态的地方:
List<CountryData> _countriesData = List<CountryData>();
void initState() {
_getValues().then((value) {
setState(() {
_countriesData.addAll(value);
});
});
super.initState();
}这是我从上述列表中获取数据的地方:
int findState(String code) {
var index = _countriesData.length;
for (int i = 0; i < index; i++) {
if (_countriesData[i].alpha3Code == (code)) {
return i;
}
}
return -1;
}这是我要显示的地方:
Widget build(BuildContext context) {
return Scaffold(
...
...
body: ListView(children: <Widget>[
Text(_countriesData[findState(code)]])))
CountryData类为:class CountryData{
String alpha3Code;
String day;
String month;
String year;
CountryData(this.alpha3Code, this.day, this.month,this.year);
CountryData.fromJson(Map<String, dynamic> json){
this.day = json['day'];
this.month = json['month'];
this.year = json['year'];
this.alpha3Code = json['alpha3Code'];
}
}
现在,如果您需要更多信息,请让我。谢谢 最佳答案
您的问题是,在拥有要显示的数据之前,构建方法正在运行。一种解决方法是使用“isLoading”标志,该标志在http调用之前设置为true,并在返回数据时设置为false(并调用setState)。在构建方法中,您检查标志并在标志为true时显示进度指示器。当它变为false时,显示您的ListView。