Flutter 如何比较2 TextFormField中的值

Flutter 如何比较2 TextFormField中的值,flutter,dart,Flutter,Dart,我希望验证2TextFormFields中的值是否匹配 我可以单独验证它们 但我如何通过比较捕获这两个值来验证呢 import 'package:flutter/material.dart'; class RegisterForm extends StatefulWidget { @override _RegisterFormState createState() => _RegisterFormState(); } class _RegisterFormState exten

我希望验证2
TextFormField
s中的值是否匹配

我可以单独验证它们

但我如何通过比较捕获这两个值来验证呢

import 'package:flutter/material.dart';

class RegisterForm extends StatefulWidget {
  @override
  _RegisterFormState createState() => _RegisterFormState();
}

class _RegisterFormState extends State<RegisterForm> {

  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Stack(
        children: [
          Container(
            padding: EdgeInsets.all(20),
            height: double.infinity,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  TextFormField(
                    decoration: InputDecoration(
                      hintText: 'Password'
                    ),
                    validator: (value) {
                      // I want to compare this value against the TextFormField below.
                      if(value.isEmpty){
                        return 'is empty';
                      }
                      return value;
                    },
                  ),
                  TextFormField(
                    decoration: InputDecoration(
                        hintText: 'Confirm Password'
                    ),
                    validator: (value) {
                      if(value.isEmpty){
                        return 'is empty';
                      }
                      return value;
                    },
                  ),
                  RaisedButton(
                    onPressed: (){
                      if (_formKey.currentState.validate()) {
                        print('ok');
                      } else {
                        print('not ok');
                      }
                    },
                  ),
                ],
              ),
          )
        ],
      ),
    );
  }
}

注:如果有更好的方法通过状态管理工具来实现,我使用的是
提供者
。不寻求集团解决方案。

我已经执行了几个步骤来实现这一点。你可以参考它来实现你的目标

  • 创建一个有状态的小部件并从中返回一个InputBox

  • 添加名为callback的属性,并将其数据类型设置为

    ValueSetter回调

  • 将此回调分配给输入框的onChanged事件

  • 一旦更改:(文本){ widget.callback(文本); },

    • 在要使用输入框的类中使用自定义小部件

    • 在使用小部件时,将回调传递给它

                  InputWithLabel(
      
                     callback: (value) {
      
                         password = value;
      
                       },
                   ),
                   InputWithLabel(
      
                     callback: (value) {
      
                           confirmPassword = value;
      
                     },
                   ),
      
    • 最后,我们必须比较这些值, 您可以将密钥绑定到表单,并在保存的事件中添加和使用它。您可以将其包装在Button的回调中

      if (InputValidation.validatePasswordandConfirm(password, cpassword)) {
      // your after form code
      }
      
    要使其具有实时比较功能,请在setState(){}中标记输入的回调之一,并在自定义文本小部件中创建一个名为compareTxt的新属性

    在验证程序上检查比较文本并返回错误消息

    validator: (text) {
              if (widget.comaparetext != text) {
                return 'Password does not match';
              }
    

    您可以使用TextEditingController。在小部件中声明TextEditingController,然后将其分配给password TextFormField的属性控制器,然后在确认密码中,检查passwordController中的值是否相同。@savke谢谢。这是一个有效的解决方案,但如果这是唯一的替代方案,我会坚持上面的解决方案。不是在这种情况下,但如果出于某种原因,我需要使用3个或更多字段,这意味着至少有2个em需要额外的控制器。而不是您正在搜索的解决方案类型?类似于动态验证的方法?是的。不必担心我正在处理的文本字段的数量,这些字段用于执行不同的操作。我期待着一些即将到来的功能,这将受益于一些动态设置。当我试着看我是否能坚持使用一个无状态的小部件时,也许可以使用提供者。问题是这是否可能。我认为在管理表单状态时使用提供程序并不明智。你能描述一下你认为这将如何工作,也许我们可以找到一些解决方案。
    validator: (text) {
              if (widget.comaparetext != text) {
                return 'Password does not match';
              }