Pea*_*Gen 3 android ios dart flutter
我正在我的 flutter 应用程序中为我的表单动态生成文本字段。请检查以下代码
Widget _buildInputFields(
String label,
TextEditingController textController,
TextInputType textInputType,
IconData icon,
Color iconColor,
) {
return Container(
margin: EdgeInsets.only(left: 20, bottom: 20),
child: Container(
padding: EdgeInsets.only(right: 20),
child: Row(
children: <Widget>[
Flexible(
child: TextFormField(
controller: textController,
validator: (value) {
if (value.isEmpty) {
return 'Please enter some text';
}
},
style: new TextStyle(color: Colors.white),
keyboardType: textInputType,
decoration: InputDecoration(
labelText: label,
fillColor: Colors.white,
labelStyle: TextStyle(
color: Colors.white, fontWeight: FontWeight.w600),
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(color: Colors.white30, width: 2.0),
borderRadius: BorderRadius.circular(25.0),
),
suffixIcon: IconButton(
icon: Icon(icon, color: iconColor),
onPressed: () {},
)),
),
),
],
),
));
}
Run Code Online (Sandbox Code Playgroud)
上面的方法返回一个TextFormField我需要的样式,所以我不必重新编码数百次。我只是调用方法,我得到一个新的TextFormField
无论如何,我需要进行表单验证并且每个字段都有不同的验证。在flutter中,我如何将a传递validator给 textformfield?
您可以简单地将验证器作为参数传递给其他验证器。您所需要的只是传入一个将字符串作为参数并返回字符串的函数。
//username validator possible structure
Function(String) usernameValidator = (String username){
if(username.isEmpty){
return 'Username empty';
}else if(username.length < 3){
return 'Username short';
}
return null;
};
//password validator possible structure
passwordValidator(String password){
if(password.isEmpty){
return 'Password empty';
}else if(password.length < 3){
return 'PasswordShort';
}
return null;
}
//new build function
Widget _buildInputFields(
String label,
TextEditingController textController,
TextInputType textInputType,
IconData icon,
Color iconColor,
String Function(String) validator
) {
return Container(
margin: EdgeInsets.only(left: 20, bottom: 20),
child: Container(
padding: EdgeInsets.only(right: 20),
child: Row(
children: <Widget>[
Flexible(
child: TextFormField(
controller: textController,
validator: validator,
style: new TextStyle(color: Colors.white),
keyboardType: textInputType,
decoration: InputDecoration(
labelText: label,
fillColor: Colors.white,
labelStyle: TextStyle(
color: Colors.white, fontWeight: FontWeight.w600),
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(color: Colors.white30, width: 2.0),
borderRadius: BorderRadius.circular(25.0),
),
suffixIcon: IconButton(
icon: Icon(icon, color: iconColor),
onPressed: () {},
)),
),
),
],
),
));
}
//calling your function
_buildInputFields(label, textController, textInputType, icon, iconColor, usernameValidator);
_buildInputFields(label, textController, textInputType, icon, iconColor, passwordValidator);
Run Code Online (Sandbox Code Playgroud)
nonybrighto答案是完全正确的,但是添加空检查后更新的代码是
// Function to create form field
Widget createFormField(String label, TextEditingController controller,
String? Function(String?)? validator) {
return TextFormField(
decoration: InputDecoration(labelText: label),
controller: controller,
autovalidate: true,
validator: validator,
);
}
// Validator
String? Function(String?)? idValidator = (String? value) {
if (value!.isEmpty) {
return 'Id Must be entered';
} else {
return int.tryParse(value) == null ? 'Id Must be number' : null;
}
};
// Finally
createFormField('Id', idController, idValidator),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8529 次 |
| 最近记录: |