Database 从小部件中返回未来的函数获取值
我试图在用户注册时检查我的数据库中是否已经存在用户名。所以我做了一个函数来检查数据库,我想让它返回一个布尔值,但是当对数据库的调用返回未来时,我把这个函数变成了一个异步函数,这样我就可以等待响应了。因为所有异步函数都返回一个未来,所以我现在有了一个未来,而不是布尔值。我希望能够在我的构建函数中多次调用我的函数,但是我得到了一个future而不是boolean,如果我尝试添加wait,我必须使它异步,这意味着我需要返回future而不是widget 这是小部件<代码>\u account.isUsernameAvailable(value)是我想要返回布尔值的函数,下面是我的构建函数。从我读到的其他答案来看,构建未来似乎是一个流行的选择,但从我所看到的来看,未来的价值需要事先知道。就我而言,这是不可能的。任何建议或帮助都将不胜感激Database 从小部件中返回未来的函数获取值,database,flutter,dart,future,Database,Flutter,Dart,Future,我试图在用户注册时检查我的数据库中是否已经存在用户名。所以我做了一个函数来检查数据库,我想让它返回一个布尔值,但是当对数据库的调用返回未来时,我把这个函数变成了一个异步函数,这样我就可以等待响应了。因为所有异步函数都返回一个未来,所以我现在有了一个未来,而不是布尔值。我希望能够在我的构建函数中多次调用我的函数,但是我得到了一个future而不是boolean,如果我尝试添加wait,我必须使它异步,这意味着我需要返回future而不是widget 这是小部件\u account.isUserna
final _account = Account();
@override
Widget build(BuildContext context) {
return loading ? Loading() : Scaffold(
appBar: AppBar(
title: Text('Sign Up'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Form(
key: _formKey,
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10.0),
child: TextFormField(
onSaved: (value) {
_username = value.trim();
},
validator: (value) {
if (value.isEmpty) {
return 'Please enter a username';
} else if (_account.isUsernameAvailable(value)) {
return 'Username already exists';
}
return null;
},
decoration: InputDecoration(
hintText: 'Username',
),
),
),
更新:
正如建议的那样,我在函数中尝试了then语句
bool _userExist = false;
checkUserValue<bool>(String user) {
_account
.isUsernameAvailable(user).then((val){
print(val);
if(val){
print ("UserName Already Exits");
_userExist = val;
}
else{
print ("UserName is Available");
_userExist = val;
}
});
print('here');
return _userExist;
}
它似乎工作,但我需要验证两次它的工作。我认为
\u userExists
的值可能是在函数以某种方式返回后设置的,但我不确定为什么会发生这种行为。也就是说,我确实有一个问题,为什么函数不在.then()完成之前返回 如果你真的想得到一个好的答案,你可能想发布帐户
类的代码。请参阅你是否尝试过将来的isUsernameAvailable(String username)async{}?然后,您应该能够在代码的其余部分使用函数的“wait”变体。通过将Future指定为返回类型,如果您等待的话,它将在将来返回bool。它在第一次输入名称时起作用,但无法从此处更新。函数本身可以工作,但我认为它会在完成之前返回。
bool _userExist = false;
checkUserValue<bool>(String user) {
_account
.isUsernameAvailable(user).then((val){
print(val);
if(val){
print ("UserName Already Exits");
_userExist = val;
}
else{
print ("UserName is Available");
_userExist = val;
}
});
print('here');
return _userExist;
}
child: TextFormField(
onSaved: (value) {
_username = value.trim();
},
validator: (value) {
return checkUserValue(value) ? "Username taken" : null;
},