颤振错误:类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型转换中类型 'List<dynamic>' 的子类型



我正试图从JSON格式的API获取新闻数据,并在我的应用程序中显示它。

新闻类:

class News {
final String title;
final String desc;
final String imgURL;
final String url;
News(
{required this.title,
required this.desc,
required this.imgURL,
required this.url});
factory News.fromJSON(Map<String, dynamic> json) {
return News(
title: json["title"],
desc: json["description"],
imgURL: json["image_url"],
url: json["url"]);
}
}

新闻对象getter:

Future<List<News>>? futureData;

Future<List<News>> getNews() async {
final response = await http.get(Uri.parse(
'https://api.stockdata.org/v1/news/all?&filter_entities=true&language=en&api_token=api_token&countries=in'));
if (response.statusCode == 200) {
List jsonResponse = json.decode(response.body);
return jsonResponse.map((data) => News.fromJSON(data)).toList();
} else {
throw Exception('Unexpected error occurred!');
}
}

显示在应用程序中的FutureBuilder:

FutureBuilder<List<News>>(
future: futureData,
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot);
List<News> data = snapshot.requireData;
return ListView.builder(
itemCount: data.length,
itemBuilder: (BuildContext context, int index) {
return Container(),
);
});
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default show a loading spinner.
return Center(child: CircularProgressIndicator());
}),

我一直得到错误:类型'_InternalLinkedHashMap<String,>'不是类型转换中类型'List'的子类型

您从api收到的响应是JsonObject类似于map,但在代码中,您试图将其解析为列表检查它在这里的样子

你的<<p> strong> News.fromJSON () 是这样写的,它只接受一个对象,而你得到的数据是一个数组。
factory News.fromJSON(Map<String, dynamic> json) {
return News(
title: json["title"],
desc: json["description"],
imgURL: json["image_url"],
url: json["url"]);

}

当前你的模型类只能接受一个对象,而不是一个列表。你可以通过这个

相关内容