Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 仅在双击时触发颤振验证器_Android_Firebase_Flutter_Dart_Widget - Fatal编程技术网

Android 仅在双击时触发颤振验证器

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

我将电话号码存储在firebase文档(表)中。我想要的是通过使用验证器检测号码是否已经存在,并在文本框下显示一条消息,说明电话号码已经存在。我对此没有问题,我的问题是必须双击按钮才能执行以完成任务

   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)的输出您自己并在文本表单字段中呈现验证红色消息

为此,请首先注意
TextFormField
类具有
装饰
属性。此属性的类型为
InputDecoration
。请阅读本课程的文档。因此,通过设置装饰的
errorText
属性,您可以手动将红色验证消息添加到表单字段中


试着想一想,玩一玩,把这些都粘在一起,你就会得到你想要的:)

你需要在表单状态上调用
validate()
方法。寻找API参考

框架不会自动为您调用此函数。您需要在按钮的
onTap()
方法中调用它。在那里添加一行
\u formKey.currentState.validate()

调用此方法时,表单将为每个表单字段调用
验证程序

---------------------------更新---------------------------------------

好了,@ppdy,你现在更近了一步。它还不能工作,因为验证器只检查值是否为空。只要仔细看看当你按下按钮时会发生什么。它运行
validateNumber
,如果该值为空,框架将呈现验证消息。然后,如果该值不是空的,则运行
addPhoneNumber
方法,但您自己运行它。这很重要,请注意,它不是作为文本表单字段
validator
property函数的一部分运行的。因此您需要处理
wait db.checkPhoneNumber(phoneNumber)的输出您自己并在文本表单字段中呈现验证红色消息

为此,请首先注意
TextFormField
类具有
装饰
属性。此属性的类型为
InputDecoration
。请阅读本课程的文档。因此,通过设置装饰的
errorText
属性,您可以手动将红色验证消息添加到表单字段中


试着好好想想,好好玩玩,把这一切粘在一起,你就会得到你想要的:)

你好,请检查编辑的代码仍然不起作用。有人能帮我吗?我已经在答案中添加了更多信息。你好,请检查编辑的代码仍然不起作用。有人能帮我吗?我已经在答案中添加了更多信息。