【发布时间】:2019-05-24 09:02:43
【问题描述】:
我有这个方法,它在 Dart 2 中编译没有问题。但是在运行时我收到以下错误
类型“
List<dynamic>”不是类型“List<ExchangeRate>”的子类型
正如您在代码中看到的,我在 .map() 中创建并返回新的 ExchangeRate 对象,然后返回一个 rateEntries.toList(),我希望它的类型为 List<ExchangeRate>,但它似乎被推断为 @ 类型987654326@!!!
@override
Future<List<ExchangeRate>> getExchangeRatesAt(DateTime time, Currency baseCurrency) async {
final http.Client client = http.Client();
final String uri = "some uri ...";
return await client
.get(uri)
.then((response) {
var jsonEntries = json.decode(response.body) as Map<String, dynamic>;
var rateJsonEntries = jsonEntries["rates"].entries.toList();
var rateEntries = rateJsonEntries.map((x) {
return new ExchangeRate(x.value.toDouble());
});
return rateEntries.toList(); // WHY IS IT RETURNING A List<dynamic> here?
})
.catchError((e) => print(e))
.whenComplete(() => client.close());
}
但是,如果我专门将其转换为 ExchangeRate 就可以了。
return rateEntries.toList().cast<ExchangeRate>();
最后的这个选角对我来说似乎是多余的,我为什么需要它?
【问题讨论】:
标签: dart