_InternalLinkedHashMap<动态,动态>"不是类型为"映射<字符串,动态>



我得到了一个错误,这是我的API包装

if (method == "get") {
var param = '';
Map<String, dynamic> params =
data['params'] != null ? data['params'] : {};
params.forEach((k, v) => param += k + "=" + (v == null ? '' : v) + "&");
try {
Dio dio = new Dio();
dio.options.headers = headers;
final response = await dio.get(url + "?" + param);
responseJson = _response(response);
//print('Response ' + response.data.toString());
} on SocketException {
throw FetchDataException('Tidak terhubung ke server');
}
. . .

,这是存储库:

Future<LeaveListModel> fetchResponse(query) async {
final response = await _wrapper.apiRequest(
"get", _wrapper.leaveListGetData, {'params': query}, true);
return LeaveListModel.fromJson(response);
}

这是服务,如果你想知道:

class Service {
GetStorage localData = GetStorage();
final String initial = "Service";
final String baseUrl = ConstantConfig().leaveListEndPoint;
final String appCode = ConstantConfig().leaveListAppCode;
final String outputType = "json";
final String routeAuthConnect = "auth/connect/";
final String routeAuthGetAccessToken = "auth/getAccessToken/";
final String leaveListGetData = "list/";
Future<dynamic> apiRequest(
String method, String route, Map<String, dynamic> data,
[bool needToken = false]) async {
ApiWrapper _apiWrapper = ApiWrapper();
if (needToken) {
int thisTime = (DateTime.now().millisecondsSinceEpoch / 1000).round();
String? savedExpired = localData.read(initial + KeyStorage.accessExpired);
int expire = savedExpired == null ? 0 : int.parse(savedExpired);
if (expire < thisTime) {
dynamic tokenResponse = await _apiWrapper.request(baseUrl, initial,
appCode, outputType, 'post', routeAuthGetAccessToken, {});
await localData.write(initial + KeyStorage.accessToken,
tokenResponse['response']['access_token']);
return await _apiWrapper.request(
baseUrl, initial, appCode, outputType, method, route, data);
} else {
return await _apiWrapper.request(
baseUrl, initial, appCode, outputType, method, route, data);
}
} else {
return await _apiWrapper.request(
baseUrl, initial, appCode, outputType, method, route, data);
}
}
}

我只是想调用一个json文件,但它显示了一个错误,我不知道我的代码出了什么问题,如果你知道如何修复它,请告诉我

这是错误:

I/flutter (20696): Call https:xxxxxxxxxxxx
I/flutter (20696): type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'

另一个错误提示:

I/flutter ( 7626): {}
I/flutter ( 7626): 1
I/flutter ( 7626): type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
I/flutter ( 7626): {}
I/flutter ( 7626): 1
I/flutter ( 7626): type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'

实际上显示进程在Map<String, dynamic> params = data['params'] != null ? data['params'] : {};上停止,因为我尝试用print('1');,print('2');,print('3');调试API包装器,只是为了显示进程停止的位置并获得错误

您需要先decode您的响应,然后使用它:

LeaveListModel.fromJson(jsonDecode(response));

我也认为你是传递query编码到ApiWrapper,所以你需要解码它像这样:

Map<String, dynamic> params = data['params'] != null ? jsonDecode(data['params']) : {};
return LeaveListModel.fromJson(response);

在我看来,你应该在这里使用response.data,而不是响应。

return LeaveListModel.fromJson(response.data);

试试这个:

Map<String, dynamic>.from(yourData)

对于Map<String, dynamic> json,像这样解析

List<Blog> blogs = (json['blogs'] as List<dynamic>).map((e) => Blog.fromJson(e as Map<String, dynamic>)).toList();

最新更新