【发布时间】:2019-08-23 04:36:45
【问题描述】:
我有 3 个构造函数类
Textformfield.dart
Validator.dart
Signin.dart
这里是 textformfield.dart
class CustomTextField extends StatelessWidget {
final String hint;
final TextEditingController textEditingController;
final TextInputType keyboardType;
final bool obscureText;
final IconData icon;
final Validator validator;
double _width;
double _pixelRatio;
bool large;
bool medium;
CustomTextField({
this.hint,
this.textEditingController,
this.keyboardType,
this.icon,
this.obscureText = false,
this.validator,
});
@override
Widget build(BuildContext context) {
_width = MediaQuery.of(context).size.width;
_pixelRatio = MediaQuery.of(context).devicePixelRatio;
large = ResponsiveWidget.isScreenLarge(_width, _pixelRatio);
medium = ResponsiveWidget.isScreenMedium(_width, _pixelRatio);
return Material(
borderRadius: BorderRadius.circular(30.0),
elevation: large ? 12 : (medium ? 10 : 8),
child: TextFormField(
autovalidate: true,
controller: textEditingController,
keyboardType: keyboardType,
cursorColor: Colors.orange[200],
decoration: InputDecoration(
prefixIcon: Icon(icon, color: Colors.orange[200], size: 20),
hintText: hint,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(30.0),
borderSide: BorderSide.none),
),
),
);
}
}
她是我的验证器.dart 代码
class Validator {
String validateName(String value) {
String pattern = r'(^[a-zA-Z ]*$)';
RegExp regExp = new RegExp(pattern);
if (value.length == 0) {
return "Name is Required";
} else if (!regExp.hasMatch(value)) {
return "Name must be a-z and A-Z";
}
return null;
}
String validateMobile(String value) {
String pattern = r'(^[0-9]*$)';
RegExp regExp = new RegExp(pattern);
if (value.length == 0) {
return "Mobile is Required";
} else if (value.length != 10) {
return "Mobile number must 10 digits";
} else if (!regExp.hasMatch(value)) {
return "Mobile Number must be digits";
}
return null;
}
String validatePasswordLength(String value){
if(value.length==0){
return "Password can't be empty";
} else if (value.length < 10){
return "Password must be longer than 10 characters";
}
return null;
}
String validateEmail(String value) {
String pattern =
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
RegExp regExp = new RegExp(pattern);
if (value.length == 0) {
return "Email is Required";
} else if (!regExp.hasMatch(value)) {
return "Invalid Email";
} else {
return null;
}
}
}
这是我遇到错误的一些 signin.dart 代码。
Widget form() {
return Container(
margin: EdgeInsets.only(
left: _width / 12.0, right: _width / 12.0, top: _height / 15.0),
child: Form(
key: _key,
autovalidate: _validate,
child: Column(
children: <Widget>[
emailTextFormField(),
SizedBox(height: _height / 40.0),
passwordTextFormField(),
],
),
),
);
}
Widget emailTextFormField() {
return CustomTextField(
keyboardType: TextInputType.emailAddress,
textEditingController: emailController,
icon: Icons.email,
hint: "Email ID",
validator: Validator().validateEmail,
);
}
Widget passwordTextFormField() {
return CustomTextField(
keyboardType: TextInputType.emailAddress,
textEditingController: passwordController,
icon: Icons.lock,
obscureText: true,
hint: "Password",
);
}
我尝试调用 Validator().validateEmail, 来验证我在 emailTextFormField 中使用的文本
“validator: Validator().validateEmail,”
它总是显示错误:
参数类型“字符串”不能分配给参数类型Validator
有没有建议使用我的Validator 类调用validator 来验证emailTextFormField?
【问题讨论】:
标签: class validation flutter dart constructor