Android 仅在双击时触发颤振验证器
我将电话号码存储在firebase文档(表)中。我想要的是通过使用验证器检测号码是否已经存在,并在文本框下显示一条消息,说明电话号码已经存在。我对此没有问题,我的问题是必须双击按钮才能执行以完成任务Android 仅在双击时触发颤振验证器,android,firebase,flutter,dart,widget,Android,Firebase,Flutter,Dart,Widget,我将电话号码存储在firebase文档(表)中。我想要的是通过使用验证器检测号码是否已经存在,并在文本框下显示一条消息,说明电话号码已经存在。我对此没有问题,我的问题是必须双击按钮才能执行以完成任务 var _formKey = GlobalKey<FormState>(); var validate; String validateNumber(String value){ if (value.isEmpty) { return 'P
var _formKey = GlobalKey<FormState>();
var validate;
String validateNumber(String value){
if (value.isEmpty) {
return 'Please enter number';
}if(validate == true){
return "Phone number already exists";
}
return null;
}
addPhoneNumber(phoneNumber) async{
var exist = await db.checkPhoneNumber(phoneNumber); //my query to firestore so far i have no problem with this.
if(exist == true){
validate = true;
print(validate);
}
if(exist == false){
validate = false;
Navigator.of(context).push(_verifyPhone(_phoneNumber.text));
await db.addPhoneNumber(phoneNumber);
}
} //my function to detect if the number exists
@override
Widget build(BuildContext context) {
_get1();
return WillPopScope(
onWillPop: () async {
Navigator.pop(context);
return true;
},
child: Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Form(
key:_formKey,
child:Expanded(
child:Scrollbar(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
TextFormField(
controller: _phoneNumber,
validator: validateNumber, //my validator
),
],
),
),
),
),
FlatButton(
onTap: (){
if(_formKey.currentState.validate()){
addPhoneNumber(phoneNumber)
}
},
)
],
),
),
);
}
}
var\u formKey=GlobalKey();
var验证;
字符串验证枚举器(字符串值){
if(value.isEmpty){
返回“请输入号码”;
}if(validate==true){
返回“电话号码已存在”;
}
返回null;
}
addPhoneNumber(phoneNumber)异步{
var exist=await db.checkPhoneNumber(phoneNumber);//我对firestore的查询到目前为止我对此没有问题。
if(exist==true){
验证=真;
打印(验证);
}
if(exist==false){
验证=假;
推送(_verifyPhone(_phoneNumber.text));
等待数据库addPhoneNumber(电话号码);
}
}//我的函数用于检测数字是否存在
@凌驾
小部件构建(构建上下文){
_get1();
返回式示波器(
onWillPop:()异步{
Navigator.pop(上下文);
返回true;
},
孩子:脚手架(
正文:专栏(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
形式(
键:_formKey,
儿童:扩大(
子:滚动条(
子:ListView(
填充:EdgeInsets.zero,
儿童:[
TextFormField(
控制器:_电话号码,
validator:ValidateEnumber,//我的验证器
),
],
),
),
),
),
扁平按钮(
onTap:(){
if(_formKey.currentState.validate()){
addPhoneNumber(电话号码)
}
},
)
],
),
),
);
}
}
您需要在表单状态上调用validate()
方法。寻找API参考
框架不会自动为您调用此函数。您需要在按钮的onTap()
方法中调用它。在那里添加一行\u formKey.currentState.validate()
调用此方法时,表单将为每个表单字段调用验证程序
---------------------------更新---------------------------------------
好了,@ppdy,你现在更近了一步。它还不能工作,因为验证器只检查值是否为空。只要仔细看看当你按下按钮时会发生什么。它运行validateNumber
,如果该值为空,框架将呈现验证消息。然后,如果该值不是空的,则运行addPhoneNumber
方法,但您自己运行它。这很重要,请注意,它不是作为文本表单字段validator
property函数的一部分运行的。因此您需要处理wait db.checkPhoneNumber(phoneNumber)的输出如果检查为false,则编码>您自己并在文本表单字段中呈现验证红色消息
为此,请首先注意TextFormField
类具有装饰
属性。此属性的类型为InputDecoration
。请阅读本课程的文档。因此,通过设置装饰的errorText
属性,您可以手动将红色验证消息添加到表单字段中
试着想一想,玩一玩,把这些都粘在一起,你就会得到你想要的:)你需要在表单状态上调用validate()
方法。寻找API参考
框架不会自动为您调用此函数。您需要在按钮的onTap()
方法中调用它。在那里添加一行\u formKey.currentState.validate()
调用此方法时,表单将为每个表单字段调用验证程序
---------------------------更新---------------------------------------
好了,@ppdy,你现在更近了一步。它还不能工作,因为验证器只检查值是否为空。只要仔细看看当你按下按钮时会发生什么。它运行validateNumber
,如果该值为空,框架将呈现验证消息。然后,如果该值不是空的,则运行addPhoneNumber
方法,但您自己运行它。这很重要,请注意,它不是作为文本表单字段validator
property函数的一部分运行的。因此您需要处理wait db.checkPhoneNumber(phoneNumber)的输出如果检查为false,则编码>您自己并在文本表单字段中呈现验证红色消息
为此,请首先注意TextFormField
类具有装饰
属性。此属性的类型为InputDecoration
。请阅读本课程的文档。因此,通过设置装饰的errorText
属性,您可以手动将红色验证消息添加到表单字段中
试着好好想想,好好玩玩,把这一切粘在一起,你就会得到你想要的:)你好,请检查编辑的代码仍然不起作用。有人能帮我吗?我已经在答案中添加了更多信息。你好,请检查编辑的代码仍然不起作用。有人能帮我吗?我已经在答案中添加了更多信息。