我有一个登录页面,用户凭据在其中检查来自api的状态响应。我编写了一个函数,该函数从支票中返回了将来的 bool(boolean) 值,但是我的问题是,如果用户第一次尝试输入错误的信息,但在该函数返回为false之后,他们总是尝试登录。
我已经将用户输入打印到控制台,它显示旧信息已更新,但仍然返回为false。
future 的 bool(boolean) 函数:
bool loginCheck;
Future<bool>check() async{
try{
await fetchResponse().then((response){
if(response.status == "ok"){
return loginCheck = true;
}else {
return loginCheck = false;
}
});
}
catch (e){
print(e);
}
return loginCheck;
}
API响应函数:
Future <SubsonicResponse>fetchResponse() async{
try{
userClear();
loginUser();
var authresponse = await http.get(authURL);
if (authresponse.statusCode == 200){
var jsondata = jsonDecode(authresponse.body);
var data = apicallFromJson(jsondata);
var response = data.subsonicResponse;
return response;
} else{
}
}
catch (e){
print(e);
}
}
其他功能:
void loginUser() {
serveraddress = _serveraddressController.text;
password = _passwordController.text;
username = _usernameController.text;
print(username);
print(password);
print(serveraddress);
}
void loginclear(){
_serveraddressController.clear();
_passwordController.clear();
_usernameController.clear();
}
void userClear(){
loginCheck = null;
serveraddress = null;
password = null;
username = null;
}
如您在上面看到的,我尝试在请求之前清除用户输入变量,并更新为最新的用户输入,但仍然返回false
登录按钮:
onPressed: () {
check().then((loginCheck){
print(loginCheck);
if(loginCheck == true){
loginclear();
return Get.toNamed('/home');
} else {
return showAlertDialog(context);
}
});
},
如果用户在第一时间输入正确的信息,则不会有任何问题。
最佳答案
您需要使用某种状态管理来更新变量的状态,即使用setState()(或流或基于用例的内容)来更新变量。
只是简单地将用户 call 清除将不起作用。
关于json - Dart boolean在更新后保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62253492/