Flutter 类型 '_InternalLinkedHashMap<String, dynamic>' 不是 'List<dynamic>' 类型的子类型
Flutter type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'
我是 Flutter 语言学习者,刚接触这个世界,
我有一个 json 像:
{
"USDBRL":
{
"id": "...",
"name": "...",...
}
}
我的美元模型:
class Dolar {
String param1;
String param2;
// Constructor
Dolar({
required this.param1,
required this.param2,
});
factory Dolar.fromJson(Map<String, dynamic> json) {
return Dolar(
param1: json['param1'],
param2: json['param2'],
);
}
}
我需要获取所有“USDBRL”字段,但是当我 运行 应用程序时,我得到“flutter: type '_InternalLinkedHashMap' is not a subtype of type 'List<dynamic>'
".
我试过在 Internet 上搜索解决方案,但 none 我试过的替代方案都奏效了。
当“USDBRL”是地图时,您错误地将其转换为列表。
去掉这一行:
List<dynamic> body = json["USDBRL"];
并替换为这一行:
Map<String, dynamic> body = json["USDBRL"];
这应该可以解决您看到的转换错误。
要解决 toList
错误,您需要更改获取 Dolar
的方式。
Dolar dolar = Dolar.fromJson(body);
这是因为“USDBRL”不包含项目列表。它是一个具有属性和值的对象。我假设“USDBRL”中的那些值是您想要用来配置 Dolar 对象中的数据的值。所以你只需将它更改为 Dolar
的单个实例,它从“USDBRL”映射中获取数据。
最终代码可能如下所示:
Future<Dolar> getDolar() async {
try {
Response res = await get(Uri.parse(endPointUrl));
if (res.statusCode==200) {
final json = jsonDecode(res.body);
Dolar dolar = Dolar.fromJson(json["USDBRL"] as Map<String, dynamic>);
return dolar;
} else {
throw ("Can't access the Dolar API");
}
} catch (e) {
print(e);
rethrow;
}
}
你能试试这个查询吗?您需要用 'as'.
定义 class
final Map<String, dynamic> jsonResult = jsonDecode(response.body);
List<Dolar> dolar = (jsonResult['USDBRL']
as List<dynamic>)
.map((data) => Dolar.fromJson(data))
.toList();
fromJson 应该会喜欢这个。
factory Dolar.fromJson(Map<String, dynamic> json) {
return Dolar(
param1: json['id'],
param2: json['name'],
);
}
我是 Flutter 语言学习者,刚接触这个世界,
{
"USDBRL":
{
"id": "...",
"name": "...",...
}
}
我的美元模型:
class Dolar {
String param1;
String param2;
// Constructor
Dolar({
required this.param1,
required this.param2,
});
factory Dolar.fromJson(Map<String, dynamic> json) {
return Dolar(
param1: json['param1'],
param2: json['param2'],
);
}
}
我需要获取所有“USDBRL”字段,但是当我 运行 应用程序时,我得到“flutter: type '_InternalLinkedHashMap
我试过在 Internet 上搜索解决方案,但 none 我试过的替代方案都奏效了。
当“USDBRL”是地图时,您错误地将其转换为列表。
去掉这一行:
List<dynamic> body = json["USDBRL"];
并替换为这一行:
Map<String, dynamic> body = json["USDBRL"];
这应该可以解决您看到的转换错误。
要解决 toList
错误,您需要更改获取 Dolar
的方式。
Dolar dolar = Dolar.fromJson(body);
这是因为“USDBRL”不包含项目列表。它是一个具有属性和值的对象。我假设“USDBRL”中的那些值是您想要用来配置 Dolar 对象中的数据的值。所以你只需将它更改为 Dolar
的单个实例,它从“USDBRL”映射中获取数据。
最终代码可能如下所示:
Future<Dolar> getDolar() async {
try {
Response res = await get(Uri.parse(endPointUrl));
if (res.statusCode==200) {
final json = jsonDecode(res.body);
Dolar dolar = Dolar.fromJson(json["USDBRL"] as Map<String, dynamic>);
return dolar;
} else {
throw ("Can't access the Dolar API");
}
} catch (e) {
print(e);
rethrow;
}
}
你能试试这个查询吗?您需要用 'as'.
定义 classfinal Map<String, dynamic> jsonResult = jsonDecode(response.body);
List<Dolar> dolar = (jsonResult['USDBRL']
as List<dynamic>)
.map((data) => Dolar.fromJson(data))
.toList();
fromJson 应该会喜欢这个。
factory Dolar.fromJson(Map<String, dynamic> json) {
return Dolar(
param1: json['id'],
param2: json['name'],
);
}