Flutter List <dynamic>不是FutureOr <List <Donation >>类型的子类型

时间:2020-07-26 08:29:48

标签: flutter dart

我收到错误消息:类型'List '不是类型'FutureOr >'的子类型。我已经检查了数据类型,但似乎找不到错误的原因。

//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());
    },
)

1 个答案:

答案 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