Flutter数据验证插件validator_annotation的使用
Flutter数据验证插件validator_annotation的使用
Annotation Values
Class
ClassValidator // 注解在类级别
字段成员
String
这些是支持字符串成员的示例注解:
IsStringValidator
IsNotEmptyStringValidator
IsEmptyStringValidator
MinStringLengthValidator
MaxStringLengthValidator
数值
这些是支持数值成员的示例注解:
IsZeroValidator
IsNegativeNumberValidator
IsPostiveNumberValidator
Usages
安装
dart pub get validator_annotation
dart pub get --dev validator_generator
示例
定义一个名为 UserModel
的类,并将其命名为 user_model.dart
。然后使用 ClassValidator
注解该类:
import 'package:validator_annotation/validator_annotation.dart';
part 'user_model.validator.dart';
@ClassValidator(
// 停止验证其余实例成员。
// 只获取第一个错误
stopWhenFirstError: false,
// 每个验证函数的命名约定
namingConvention: NamingConvention.snackCase,
)
class UserModel {
// 在电子邮件字段上应用非空规则
@IsNotEmptyStringValidator()
// 在电子邮件字段上应用电子邮件规则
@IsEmailValidator(
// 自定义字段名称
// 当为空时,将采用声明名称
fieldName: 'email',
// 自定义错误消息
errorMessage: 'is not email',
)
// `validator_generator` 将生成 `validate_email` 函数,
// 用于验证此字段。
// 查看 example.validator.dart
final String email;
@IsNotEmptyStringValidator()
final String password;
const UserModel({
required this.email,
required this.password,
});
}
运行 validator_generator
以生成验证类:
dart pub run build_runner build
validator_generator
创建对应的部分文件 user_model.validator.dart
:
// 自动生成的代码 - 不要手动修改
// ignore_for_file: non_constant_identifier_names
part of 'user_model.dart';
// ***************************************************************************
// ValidatorModelGenerator
// ***************************************************************************
class UserModelValidator {
static String? validate_email(String value) {
final validatorAnnotations = [
const IsNotEmptyStringValidator(),
const IsEmailValidator(fieldName: 'email', errorMessage: 'is not email')
];
return validateField(
value,
validatorAnnotations,
);
}
static String? validate_password(String value) {
final validatorAnnotations = [const IsNotEmptyStringValidator()];
return validateField(
value,
validatorAnnotations,
);
}
static ValidationResult validate(UserModel instance) {
// 验证数据
final validationDatas = [
ValidationData(
instanceMemberSymbol: 'email',
valueToValidate: instance.email,
annotations: [
const IsNotEmptyStringValidator(),
const IsEmailValidator(
fieldName: 'email', errorMessage: 'is not email')
],
),
ValidationData(
instanceMemberSymbol: 'password',
valueToValidate: instance.password,
annotations: [const IsNotEmptyStringValidator()],
)
];
// 验证器选项
const stopWhenFirstError = false;
return validateInstance(
validationDatas,
stopWhenFirstError: stopWhenFirstError,
);
}
}
更多关于Flutter数据验证插件validator_annotation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据验证插件validator_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
validator_annotation
是一个用于 Flutter 应用中进行数据验证的注解库。它允许你通过注解的方式对模型类中的字段进行验证,从而简化数据验证的流程。以下是如何使用 validator_annotation
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 validator_annotation
和 validator_annotation_generator
依赖:
dependencies:
flutter:
sdk: flutter
validator_annotation: ^1.0.0
dev_dependencies:
build_runner: ^2.1.0
validator_annotation_generator: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 创建模型类
接下来,你可以创建一个模型类,并使用 validator_annotation
提供的注解来标记需要验证的字段。
import 'package:validator_annotation/validator_annotation.dart';
part 'user_model.g.dart'; // 自动生成的文件
[@Validator](/user/Validator)()
class UserModel {
@EmailValidator(message: "请输入有效的电子邮件地址")
String email;
@LengthValidator(min: 6, max: 20, message: "密码长度必须在6到20个字符之间")
String password;
UserModel({required this.email, required this.password});
}
3. 生成验证代码
使用 build_runner
来自动生成验证代码。在终端运行以下命令:
flutter pub run build_runner build
这将会生成一个 user_model.g.dart
文件,其中包含了验证逻辑。
4. 使用生成的验证器
现在你可以使用生成的验证器来验证模型类的实例。
import 'user_model.dart';
void main() {
var user = UserModel(email: "invalid-email", password: "123");
var validator = user.$validate();
if (validator.isValid) {
print("验证通过");
} else {
print("验证失败: ${validator.errors}");
}
}
5. 自定义验证器
如果你需要自定义验证器,可以通过继承 FieldValidator
类来实现。
import 'package:validator_annotation/validator_annotation.dart';
class CustomValidator extends FieldValidator {
CustomValidator({required String message}) : super(message);
@override
bool isValid(dynamic value) {
// 自定义验证逻辑
return value == "custom";
}
}
然后在模型类中使用自定义验证器:
[@Validator](/user/Validator)()
class UserModel {
[@CustomValidator](/user/CustomValidator)(message: "值必须为 'custom'")
String customField;
UserModel({required this.customField});
}