正确响应后Flutter解析错误

问题描述 投票:0回答:2

我是 flutter 开发的初学者,目前正在使用 dio 来处理 api 调用。目前,响应在打印后以正确的格式显示。但是在解析会话中我得到了这样的错误“类型'List'不是'Map'类型的子类型”

我的模特班

import 'package:object_mapper/object_mapper.dart';

class BottomNavListItem with Mappable {
int? id;
String? name;

@override
void mapping(Mapper map) {
map("id", id, (v) => id = v);
map("name", name, (v) => name = v);
}

}

响应处理类

Future<List<BottomNavListItem>?> getFamilyStatus(String url) async {
Response response;
List<BottomNavListItem>? bottomNavListModel;
try {
response = await WebUtil.createDio().get(url);
if (kDebugMode) {
print(response.data.toString());
}
bottomNavListModel =
Mapper.fromJson(response.data).toObject<List<BottomNavListItem>>();
} on DioError catch (e) {

print(response.data.toString());将打印: [{id: 1, name: test}, {id: 2, name: MiddleClass}, {id: 3, name: UpperMiddleClass}, {id: 4, name: Rich}] 这是正确格式的 Json 数组。 任何人都知道解决方案请帮助....

flutter dart response mapper dio
2个回答
0
投票

你从 Dio 得到的结果是一个 List of Maps(不是 Map),它可能是一个 List>.

所以,在使用Mapper之前需要先用

jsonDecode
解码结果。它将是这样的:

bottomNavListModel = jsonDecode(response.data).map((element) => Mapper.fromJson(element).toObject<BottomNavListItem>()).toList();

我不熟悉

object_mapper
包,所以你可以修改上面的代码来得到你想要的值。


0
投票

您得到的响应是地图列表

所以你不能直接在响应上做 Mapper.fromJson(response.data) 。

您可以改为遍历每个项目并调用

Mapper.fromJson(response[i].data)
这可能会有所帮助。

或者为了更轻松地调试,您可以尝试找出响应的 runTimeType 通过使用

print(response.runTimeType)

© www.soinside.com 2019 - 2024. All rights reserved.