我想在调用API时创建一个用户。 我用URL创建了Future,然后在屏幕页面中调用模型。 我以表格形式获取所有数据,但是当我调用API时,出现此错误:
getter'length'被调用为null ...
用户模型:
function filterfaq () {
const search = this.searchValue.toLowerCase().trim();
if (!search) return this.faq;
return this.faq.map(item => {
return {
...item,
content: item.content.filter(question => {
return question.qus.toLowerCase().includes(search);
}),
}
});
}
编辑:
我在修改后添加了登录页面的所有代码。
在登录页面中:
class Candidate {
int id;
String firstname;
String lastname;
String email;
Candidate({this.id, this.firstname, this.lastname, this.email});
factory Candidate.fromJson(Map<String, dynamic> json) {
return Candidate(
id: json['id'],
firstname: json['firstname'],
lastname: json['lastname'],
email: json['email'],
);
}
Map toMap() {
var map = new Map<String, dynamic>();
map["id"] = id;
map["firstname"] = firstname;
map["lastname"] = lastname;
map["email"] = email;
return map;
}
Future<Candidate> candidateAuth({Map body}) async {
String url = 'http://10.0.2.2:3000/v1/api/auth/candidate';
final response = await http.post(url, body: body, headers: {"Accept": "application/json"});
if (response.statusCode == 201) {
return Candidate.fromJson(json.decode(response.body));
} else {
throw Exception('Failed auth');
}
}
}
错误消息:
发生异常。
NoSuchMethodError(NoSuchMethodError:在null上调用了getter'length'。 接收方:null尝试调用: 长度)在处理手势时引发了以下断言: setState()回调参数返回Future。 setState()方法 在_Login#e2125上使用返回了Future的闭包或方法进行了调用。 也许它被标记为“异步”。而不是执行 在对setState()的调用中进行异步工作,首先执行工作 (不更新窗口小部件状态),然后同步更新 调用setState()的内部状态
答案 0 :(得分:1)
是:
headers: {'Content-type': 'application/json','Accept': 'application/json'}
答案 1 :(得分:0)
由于candidateAuth
返回Future,因此您需要添加await
:
Candidate newPost = new Candidate(
lastname: lastname,
firstname: firstname,
email: email,
);
var candidate = await Candidate().candidateAuth(body: newPost.toMap());
UPD:
根据错误消息,从async
中删除setState
:
onPressed: () async {
if (_formKey.currentState.validate()) {
Candidate newPost = new Candidate(
lastname: lastname,
firstname: firstname,
email: email,);
var candidate = await Candidate().candidateAuth(body: newPost.toMap());
setState(() {
// do what you need with candidate here
});
}
},