firebase - 表单字段输入的 Flutter firebase 验证
问题描述
我是 Flutter 和 Firebase 的新手,我正在尝试验证来自表单的用户输入并针对 firebase 集合运行它。
我要求用户创建一个用户名并想验证我的 Firebase 目录中没有现有的用户名。
我从检查 Flutter Firestore 中是否存在字段的讨论中得到了这个验证方法。我想为该方法提供一个名称,使用该名称构建一个文档列表,并确认不存在。
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;
}
我希望能够在文本表单字段的验证器中调用此方法,如下所示。
new TextFormField(
decoration: new InputDecoration(labelText: 'Username'),
validator: (value) => doesNameAlreadyExist(value) ? "Username already taken" : null,
onSaved: (value) => _username = value,
),
但是,这会引发一个错误,我必须为验证器提供一个静态类型的 bool。
我的问题:我如何(1)创建一个能够搜索 Firebase 的静态布尔方法,或者(2)如何通过异步调用获得相同的功能(理想情况下,无需构建另一个小部件)?
解决方案
未来给出 then() 方法,可以使用 That。您可以将验证器方法修改为:
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;
}
推荐阅读
- postgresql - PostgreSQL 使用 COPY FROM PROGRAM 获取磁盘可用空间
- pandas - 在 matplotlib 执行的地方无法正确加载图表
- ruby - 使用 ARGV 将命令行参数传递给 ruby 脚本
- javascript - 基于使用 Javascript API 的选择从 Excel 表格行中提取数据
- gitlab - 如何从浏览器查询 gitlab API?
- python - 更改用户时如何不显示密码?
- android - 如何通过要求人们四处走动来创建地理围栏
- javascript - 每次 $() 选择某些东西时添加一个字符串
- c - 获得独立于不同输入的相同输出
- go - 通过 golang 将 avro 格式的消息推送到 kafka