我收到错误消息:类型'List >'的子类型。我已经检查了数据类型,但似乎找不到错误的原因。
//getting the data from api call
Future<List<Donation>> _getDonationRecord() async {
var res = await CallApi().donationRecords();
var body = json.decode(res.body);
return body.map((p) => Donation.fromJson(p)).toList();
}
//Building the futurebuilder
FutureBuilder<List<Donation>>(
future: _getDonationRecord(),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<Donation> data = snapshot.data;
return ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return ListTile(
leading: Icon(Icons.thumb_up,color: kPrimaryColor,) ,
title: Text(data[index].hospital,style: TextStyle(color: Colors.black),),
subtitle: Text(data[index].date,style: TextStyle(color: Colors.black),),
trailing: Text(data[index].donorDonatedLitre,style: TextStyle(color: Colors.black),),
);
});
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return Center(child: CircularProgressIndicator());
},
)
答案 0 :(得分:1)
问题是json.decode
返回dynamic
。结果,此类型传播到函数的末尾,这就是为什么您会遇到这种类型错误的原因。尝试这样的事情:
Future<List<Donation>> _getDonationRecord() async {
var res = await CallApi().donationRecords();
var body = json.decode(res.body) as List<Object>;
return body.map((p) => Donation.fromJson(p)).toList();
}
甚至是这样:
var body = json.decode(res.body) as List<Map<String, Object>>;
使用dynamic
类型很困难,原因有很多。尽可能避免这种情况的好主意。在这种情况下,您可以将Dart分析设置为出现编译错误。您可以阅读如何完成此here。