json - 获取“列表”类型的错误' 不是类型 'Map 的子类型'
问题描述
我正在创建一个颤振应用程序以在列表中显示用户。我可以获取并打印数据,但是我无法显示数据,因为我收到了这个错误Exception has occurred. _TypeError (type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>')
我使用 dio 包来获取数据。这是用于进行 api 调用的代码
class DioClient {
final Dio _dio = Dio();
final _farmerUrl = 'https://retoolapi.dev/Rzl99e/farmers';
Future<Users?> getUser() async {
Users? users;
try {
Response userData = await _dio.get(_farmerUrl);
print('User Info: ${userData.data}');
users = Users.fromJson(userData.data);
} on DioError catch (e) {
if (e.response != null) {
print('Dio error!');
} else {
print('Error sending request! '+ e.message);
}
}
return users;
}
}
这是我用来解析 json 响应的模型类
List<Users> usersFromJson(String str) => List<Users>.from(json.decode(str).map((x) => Users.fromJson(x)));
String usersToJson(List<Users> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Users {
Users({
this.id,
this.bio,
this.email,
this.lastName,
this.firstName,
this.phoneNumber,
this.memberNumber,
});
int? id;
String? bio;
String? email;
String? lastName;
String? firstName;
String? phoneNumber;
String? memberNumber;
factory Users.fromJson(Map<String, dynamic> json) => Users(
id: json["id"],
bio: json["bio"],
email: json["email"],
lastName: json["last_name"],
firstName: json["first_name"],
phoneNumber: json["phone_number"],
memberNumber: json["member_number"],
);
Map<String, dynamic> toJson() => {
"id": id,
"bio": bio,
"email": email,
"last_name": lastName,
"first_name": firstName,
"phone_number": phoneNumber,
"member_number": memberNumber,
};
}
这是我用来显示用户列表的代码
body: SingleChildScrollView(
child: Center(
child: FutureBuilder<Users?>(
future: _client.getUser(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Users? userInfo = snapshot.data;
if (userInfo != null) {
return ListTile(
title: Text(userInfo.firstName! + ' ' + userInfo.lastName!),
subtitle: Text(userInfo.phoneNumber!),
);
}
}
return CircularProgressIndicator();
},
),
),
),
我可以更改什么以完全显示用户列表。
解决方案
API 返回 JSON 数组而不是 json 对象,因此是 List 而不是 Map。
即用户 json 是 Json 数组的第一个元素。
所以要获得第一个元素,请使用第一个索引。内部获取信息更新
return Users.fromJson(jsonresponse[0]);
推荐阅读
- android - AppCompatTextView 内的文本超出范围
- python - 在保存在 Django 模型中之前,有什么方法可以从 ManyToManyField 中获取选定的值
- python - Resample() 为不存在的日期返回不正确的数字
- ssl - Cert-Manager 为 AKS 提供自己的 SSL 证书
- php - 将 PHP 脚本转换为 Unix 可执行文件
- javascript - 在 ngx-editor 中,单击按钮时如何在光标位置插入 html 块
- arrays - 角度循环遍历对象数组
- javascript - 抛出错误:Describe 不是函数。运行 Mocha 测试时出现此错误
- java - Java 编译器中是否有一个全局设置来禁用 String.formatted() 的弃用?
- php - 在函数php中启动类对象?