Flutter Form中密码与确认密码校验报类型不匹配错误怎么解决?
问题原因
TextFormField的validator属性要求传入的回调函数类型为String? Function(String?),即仅接受1个可空字符串类型的输入值作为参数,验证通过返回null,验证失败返回错误提示字符串。你定义的passwordInputValidator需要传入2个参数,类型不匹配,因此触发了类型错误。
修复步骤
- 调整确认密码的验证函数定义,不要把密码控制器作为参数传入,直接复用当前作用域下的
_passwordController,同时补全空值处理和正确的返回值:
final _passwordController = TextEditingController(); final _confirmpasswordController = TextEditingController(); // 确认密码验证函数,符合validator的类型要求 String? confirmPasswordValidator(String? value) { // 先处理空值情况 if (value == null || value.isEmpty) { return '请输入确认密码'; } // 注意原代码的=!是错误写法,正确不等判断为!= if (value != _passwordController.text) { return '两次输入的密码不一致'; } // 验证通过必须返回null return null; }
- 替换
MakeInput中确认密码框传入的验证函数为调整后的函数:
MakeInput( 'Type your password', true, nameInputValidator, // 注意原密码验证函数也需要符合String? Function(String?)的类型要求 _passwordController ), MakeInput( 'Confirm Password', true, confirmPasswordValidator, _confirmpasswordController ),
- 可选优化:给
MakeInput的参数加上明确的类型声明,提前规避后续同类类型不匹配问题:
// 明确参数类型约束 Widget MakeInput(String label, bool obscureText, String? Function(String?)? validator, TextEditingController controller) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text( label, style: TextStyle( fontSize: 15, fontWeight: FontWeight.w400, color: Colors.white ), ), SizedBox(height: 5), TextFormField( obscureText: obscureText, controller: controller, style: TextStyle(color: Colors.white), decoration: InputDecoration( contentPadding: EdgeInsets.symmetric(vertical: 0, horizontal: 12), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.purple[800]!) ), border: OutlineInputBorder( borderSide: BorderSide(color: Colors.purple[800]!) ), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.purple[800]!, width: 2.0), ) ), validator: validator ), ], ); }
内容的提问来源于stack exchange,提问作者Learning Code
相关产品推荐
相关产品推荐

