【发布时间】:2021-07-11 20:30:05
【问题描述】:
我在 Flutter 的项目中工作,我正在尝试从服务器获取 JSON 响应并将其输出到控制台。显示错误:
Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, String>'
我该如何解决这个问题?
错误:
调用 API:
import 'package:http/http.dart' as http;
import 'package:omie/app/data/models/consulta_extrato_model.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ConsultaExtratoApi {
static Future<List<ConsultaExtratoModel>> getExtrato(String conta,
String codIntCC, String dataInicial, String dataFinal) async {
var prefs = await SharedPreferences.getInstance();
String token = (prefs.getString("tokenclientes") ?? "");
var extratos;
var url = "https://XXXXXXXXXXXXXXXXXXXXXXXXX/api/v1/financas/extrato/";
Map headers = {
'Content-Type': 'application/json',
"Authorization": "Bearer $token"
};
print("STATUS CONSULTA TOKEN ===>>>: $token");
Map<String, dynamic> _params = {
"call": "ListarExtrato",
"param": [
{
"nCodCC": codIntCC,
"cCodIntCC": codIntCC,
"dPeriodoInicial": dataInicial,
"dPeriodoFinal": dataFinal
}
]
};
print("STATUS CONSULTA HEADER ===>>>: $headers");
print("STATUS CONSULTA PARAMS ===>>>: $_params");
print("STATUS CONSULTA URL ===>>>: $url");
var _body = json.encode(_params);
print("STATUS CONSULTA BODY ===>>>: $_body");
var response = await http.post(url, headers: headers, body: _body);
// Map<String, dynamic> data = new Map<String, dynamic>.from(json.decode(response.body));
print("STATUS CONSULTA response ===>>>: $response");
print("STATUS CONSULTA response body ===>>>: ${response.body}");
Map mapResponse = jsonDecode(response.body);
print("STATUS CONSULTA mapResponse ===>>>: $mapResponse");
if (response.statusCode == 200) {
extratos = ConsultaExtratoModel.fromJson(mapResponse);
print("STATUS CONSULTA extratos ===>>>: $extratos");
}
return extratos;
}
}
型号
class ConsultaExtratoModel {
String call;
List<Param> param;
ConsultaExtratoModel({this.call, this.param});
ConsultaExtratoModel.fromJson(Map<String, dynamic> json) {
call = json['call'];
if (json['param'] != null) {
param = new List<Param>();
json['param'].forEach((v) {
param.add(new Param.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['call'] = this.call;
if (this.param != null) {
data['param'] = this.param.map((v) => v.toJson()).toList();
}
return data;
}
String toString(){
return 'CONSULTA EXTRATO MODEL (call: $call), param: $param';
}
}
class Param {
int nCodCC;
String cCodIntCC;
String dPeriodoInicial;
String dPeriodoFinal;
Param(
{this.nCodCC, this.cCodIntCC, this.dPeriodoInicial, this.dPeriodoFinal});
Param.fromJson(Map<String, dynamic> json) {
nCodCC = json['nCodCC'];
cCodIntCC = json['cCodIntCC'];
dPeriodoInicial = json['dPeriodoInicial'];
dPeriodoFinal = json['dPeriodoFinal'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['nCodCC'] = this.nCodCC;
data['cCodIntCC'] = this.cCodIntCC;
data['dPeriodoInicial'] = this.dPeriodoInicial;
data['dPeriodoFinal'] = this.dPeriodoFinal;
return data;
}
String toString(){
return 'CONSULTA EXTRATO PARAMS (call: $nCodCC), param: $cCodIntCC, dPeriodoInicial: $dPeriodoInicial, dPeriodoFinal: $dPeriodoFinal';
}
}
可能是什么原因?
【问题讨论】:
-
我相信这条线
Map mapResponse = jsonDecode(response.body);可能是问题所在。将其更改为final mapResponse = Map<String, String>.from(jsonDecode(response.body));是否可以正常工作?
标签: json api flutter rest http-post