在 列表<User>用户 = [] ------ 未处理的异常:类型 '(dynamic) => Null' 不是类型为 '(String, dynamic) => vo



我是raul,需要一些帮助

错误

未处理的异常:类型'(动态(=>Null"不是类型"(String,dynamic(=>的子类型;"f"无效

用户类


class User {
final String Nome, Email, Senha;
User({@required this.Nome, @required this.Email, @required this.Senha});
factory User.fromJson(Map<String, dynamic> jsonuser) {
return User(
Email: jsonuser['Email'] as String,
Nome: jsonuser['Nome'] as String,
Senha: jsonuser['Senha'] as String);
}
}

获取类

Future<List<User>> findExists() async {
String urlLogReg = "https://weblogin.conveyor.cloud/api/login";
var response = await get(Uri.parse("$urlLogReg?email=$EmailRL"),
headers: {'Content-Type': 'application/json'});
if (response.statusCode == 200 && response.body != null) {
var JsonData = json.decode(response.body);
print(JsonData);
List<User> users = [];
JsonData.forEach((userData) {
User user = User.fromJson(userData);
users.add(user);
}
);
}else{
throw Exception('falha ao pegar dados');
}
}

非常感谢您的帮助,祝度过美好的一天

好的,错误在这里:

var JsonData = json.decode(response.body);
JsonData.forEach((userData) {
User user = User.fromJson(userData);
users.add(user);
}

由于JsonData是映射<字符串,动态>在for each中的匿名函数中,当您有两个项(键和值(时,您只获取一个项userData,因此会出现错误。

这是你在forEach中的函数(userData) {...}

(动态(=>空

现在对于解决方案,您可能应该使用map方法将JsonData转换为User对象。

...
if (response.statusCode == 200 && response.body != null) {
var JsonData = json.decode(response.body)as List;// Presumably you are fetching a list of Users [] so i cast the result to a List
print(JsonData);
List<User> users = JsonData.map((e)=>User.fromJson(e)).toList();
//Here I can map passing just one argument because I casted my JsonData to a List and List's only have a value.
// Then i call toList() as the map method returns an Iterable ,not a List.
return users;
);
}
...

希望这对你有所帮助我也曾在《飞镖》中与Json连载斗争过很多。如果你的项目开始扩大,我建议你使用json_serializable之类的包,或者快速访问https://app.quicktype.io。序列化是重复的,而且容易出错,如果你能自动化它,那就更好了。

相关内容

最新更新