Issue
I'm new to Flutter and Firebase and I am trying to validate user input from a form and run it up against a the firebase collection.
I ask users to create a username and want to validate that there is not an existing username in my Firebase directory.
I got this validation method from the discussion on Check if Field Already exists in Flutter Firestore. I want to feed the method a name, build a List of documents with that name, and confirm that none exist.
Future<bool> doesNameAlreadyExist(String name) async {
final QuerySnapshot result = await Firestore.instance
.collection('user')
.where('user_id', isEqualTo: name)
.limit(1)
.getDocuments();
final List<DocumentSnapshot> documents = result.documents;
return documents.length == 1;
}
I hope to be able to call this method within the validator of the text form field as I have done below.
new TextFormField(
decoration: new InputDecoration(labelText: 'Username'),
validator: (value) => doesNameAlreadyExist(value) ? "Username already taken" : null,
onSaved: (value) => _username = value,
),
However, this throws an error that I must have a static type of bool for the validator.
My question: how can I (1) create a static boolean method that would be able to search Firebase or (2) how can I get the same functionality with the async call (ideally, without having to build another widget)?
Solution
Future give then() Method, you can use That. You can modify your validator Method as:
validator: (value) => checkUserValue(value) ? "Username already taken" : null,
bool _userExist = false;
checkUserValue<bool>(String user) {
_doesEmailAlreadyExist(user).then((val){
if(val){
print ("UserName Already Exits");
_userExist = val;
}
else{
print ("UserName is Available");
_userExist = val;
}
});
return _userExist;
}
Answered By - anmol.majhail
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.