Flutter 如何比较2 TextFormField中的值
我希望验证2Flutter 如何比较2 TextFormField中的值,flutter,dart,Flutter,Dart,我希望验证2TextFormFields中的值是否匹配 我可以单独验证它们 但我如何通过比较捕获这两个值来验证呢 import 'package:flutter/material.dart'; class RegisterForm extends StatefulWidget { @override _RegisterFormState createState() => _RegisterFormState(); } class _RegisterFormState exten
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');
}
},
),
],
),
)
],
),
);
}
}
注:如果有更好的方法通过状态管理工具来实现,我使用的是
提供者
。不寻求集团解决方案。我已经执行了几个步骤来实现这一点。你可以参考它来实现你的目标
- 在要使用输入框的类中使用自定义小部件
- 在使用小部件时,将回调传递给它
InputWithLabel( callback: (value) { password = value; }, ), InputWithLabel( callback: (value) { confirmPassword = value; }, ),
- 最后,我们必须比较这些值,
您可以将密钥绑定到表单,并在保存的事件中添加和使用它。您可以将其包装在Button的回调中
if (InputValidation.validatePasswordandConfirm(password, cpassword)) { // your after form code }
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';
}