Flutter表单验证插件bandicoot_validation的使用
Flutter表单验证插件bandicoot_validation的使用
Bandicoot是一个验证模式库,它使创建验证模式变得简单,并且可以将这些验证模式应用于提供的Map
。此外,Bandicoot还提供了对映射值进行清理的能力。
创建一个Schema
要创建一个模式,只需初始化一个新的Validator
类并添加你希望为每个属性应用的验证规则和/或清理规则。
import 'package:bandicoot_validation/bandicoot_validation.dart';
PasswordRules passwordRules = PasswordRules();
Validator RegisterUserValidator = Validator()
..property(
name:'firstName',
validators: [IsString()]
)
..property(
name:'lastName',
validators: [IsString()]
)
..property(
name: 'emailAddress',
validators: [IsEmail()]
)
..property(
name: 'confirmEmailAddress',
validators: [MatchesProperty('emailAddress')]
)
..property(
name: 'password',
validators: [IsPassword(passwordRules)]
)
..property(
name:'confirmPassword',
validators: [MatchesProperty('password')]
);
void main() {
Map registerData = {
'firstName': 'John',
'lastName': 'Doe',
'emailAddress': 'example@gmail.com',
'confirmEmailAddress': 'example@gmail.com',
'password': 'insecure',
'confirmPassword': 'insecure'
};
List<String> errors = RegisterUserValidator.validate(registerData);
if (errors.length > 0) {
// 错误已被返回
} else {
// 没有错误!
}
}
验证规则
以下是可用的验证规则及其描述:
验证规则 | 描述 |
---|---|
Equals(String value) |
检查属性是否等于特定值。 |
IsEmail() |
检查属性是否为有效的电子邮件地址。 |
IsEnum(Enum) |
检查属性是否为有效的枚举。 |
IsInt() |
检查属性是否为int 类型。 |
IsPassword(PasswordRules rules) |
检查属性是否符合密码规则。 |
IsString() |
检查属性是否为字符串。 |
IsUUID(String version = 'all') |
检查属性是否为有效的UUID。 |
MatchesProperty(String property) |
检查属性是否与另一个属性的值匹配。 |
Matches(String pattern) |
检查属性是否与正则表达式匹配。 |
Validate(ValidateFunction validate) |
检查属性是否通过自定义验证。 |
清理规则
以下是可用的清理规则及其描述:
清理规则 | 描述 |
---|---|
ToDate() |
将值强制转换为DateTime 。 |
ToInt() |
将字符串值强制转换为num 。 |
ToString() |
将非字符串值强制转换为String 。 |
扩展性
使用Bandicoot,创建自定义验证和清理器非常容易。你只需要创建一个返回ValidationRule
或SanitizeRule
的函数即可。
示例ValidationRule
import 'package:bandicoot_validation/bandicoot_validation.dart';
ValidationRule IsIn(List<dynamic> array, {String? message}) => ValidationRule(
message: message,
constraints: [array],
validate: (value, arguments) =>
Future(() => arguments.constraints[0].contains(value)),
defaultMessage: (arguments) {
String property = arguments.property;
String arrayValues = arguments.constraints[0].join(', ');
return "$property 必须是以下值之一: $arrayValues";
});
示例SanitizeRule
import 'package:bandicoot_validation/bandicoot_validation.dart';
DateTime? toDate(String string) {
try {
return DateTime.parse(string);
} catch (e) {
return null;
}
}
SanitizeRule ToDate() => SanitizeRule(
constraints: [], sanitize: (value, arguments) => toDate(value));
更多关于Flutter表单验证插件bandicoot_validation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单验证插件bandicoot_validation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bandicoot_validation
是一个用于 Flutter 应用的表单验证插件,它提供了简单且灵活的验证规则,帮助开发者轻松地验证表单输入。以下是如何使用 bandicoot_validation
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 bandicoot_validation
依赖:
dependencies:
flutter:
sdk: flutter
bandicoot_validation: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在需要使用表单验证的 Dart 文件中导入 bandicoot_validation
包:
import 'package:bandicoot_validation/bandicoot_validation.dart';
3. 创建表单并应用验证规则
接下来,你可以创建一个表单,并应用 bandicoot_validation
提供的验证规则。
import 'package:flutter/material.dart';
import 'package:bandicoot_validation/bandicoot_validation.dart';
class MyForm extends StatefulWidget {
@override
_MyFormState createState() => _MyFormState();
}
class _MyFormState extends State<MyForm> {
final _formKey = GlobalKey<FormState>();
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
@override
void dispose() {
_emailController.dispose();
_passwordController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Form Validation with Bandicoot'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
controller: _emailController,
decoration: InputDecoration(labelText: 'Email'),
validator: (value) => Validator.validateEmail(value),
),
SizedBox(height: 16.0),
TextFormField(
controller: _passwordController,
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: (value) => Validator.validatePassword(value),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// 表单验证通过,执行提交操作
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Form Submitted Successfully')),
);
}
},
child: Text('Submit'),
),
],
),
),
),
);
}
}
4. 使用验证器
bandicoot_validation
提供了一些内置的验证器,例如 validateEmail
和 validatePassword
。你也可以创建自定义的验证规则。
内置验证器示例:
Validator.validateEmail(String? value)
: 验证电子邮件地址。Validator.validatePassword(String? value)
: 验证密码(默认要求至少6个字符)。
自定义验证器示例:
你可以使用 Validator
类的 addRule
方法来添加自定义验证规则。
Validator.addRule('customRule', (value) {
if (value == null || value.isEmpty) {
return 'This field is required';
}
if (value.length < 5) {
return 'Value must be at least 5 characters long';
}
return null;
});
然后在 validator
中使用自定义规则:
TextFormField(
decoration: InputDecoration(labelText: 'Custom Field'),
validator: (value) => Validator.validate('customRule', value),
),
5. 处理表单提交
在表单的提交按钮中,使用 _formKey.currentState!.validate()
来验证表单。如果所有字段都通过验证,validate()
方法将返回 true
,你可以继续处理表单提交逻辑。
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// 表单验证通过,执行提交操作
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Form Submitted Successfully')),
);
}
},
child: Text('Submit'),
),