正确响应后出现 Flutter 解析错误

qrjkbowd  于 2023-04-22  发布在  Flutter
关注(0)|答案(3)|浏览(131)

我是flutter开发的初学者,目前正在使用dio处理API调用。目前打印后的响应显示格式正确。但在解析会话中,我遇到了这样的错误**“type 'List' is not a subtype of type 'Map〈String,dynamic〉'”**
我的模特课

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数组。任何人都知道一个解决方案,请帮助....

jbose2ul

jbose2ul1#

你需要像这样解析数据

response.data.forEach((item){
      bottomNavListModel?.add(BottomNavListItem.fromJson(item));
    });

和更新模型

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);
  }

  BottomNavListItem.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
  }
}
toe95027

toe950272#

您得到的响应是一个Map列表
所以你不能直接在响应上使用Mapper.fromJson(response.data)。
你可以迭代每一项并调用Mapper.fromJson(response[i].data),这可能会有所帮助。
或者为了更容易地调试,您可以尝试使用print(response.runTimeType)来找出响应的runTimeType

vnjpjtjt

vnjpjtjt3#

从Dio得到的结果是一个Map列表(不是Map),可能是一个List〈Map〈String,dynamic〉〉。
你需要将它的每一项转换为BottomNavListItem,如下所示:

List<BottomNavListItem>? bottomNavListModel;

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

相关问题