Flutter表单验证插件validator_generator的使用
Flutter表单验证插件validator_generator的使用
概述
validator_generator
是一个用于生成表单验证器的 Dart 构建系统插件。通过在类上添加注解,该插件会在构建时生成相应的验证器类。
安装
要配置项目以使用 validator_generator
,请在 pubspec.yaml
文件中添加依赖:
dependencies:
validator_annotation: ^x.x.x
dev_dependencies:
build_runner: ^x.x.x
validator_generator: ^x.x.x
然后运行以下命令来获取依赖项:
flutter pub get
示例
假设你有一个名为 UserModel
的类,它包含两个字段:email
和 password
。我们希望为这些字段添加验证规则,并生成相应的验证器类。
步骤 1: 添加注解
首先,在 UserModel
类上添加 @ClassValidator
注解,并在每个字段上添加适当的验证注解。
import 'package:validator_annotation/validator_annotation.dart';
part 'user_model.validator.dart';
@ClassValidator(
// 只获取第一个错误
stopWhenFirstError: false,
// 验证函数命名约定
namingConvention: NamingConvention.snack_case,
)
class UserModel {
// 对 email 字段应用非空字符串验证
@IsNotEmptyStringValidator()
// 对 email 字段应用电子邮件验证
@IsEmailValidator(
// 自定义字段名
fieldName: 'email',
// 自定义错误消息
errorMessage: '不是有效的电子邮件',
)
final String email;
@IsNotEmptyStringValidator()
final String password;
const UserModel({
required this.email,
required this.password,
});
}
步骤 2: 运行构建工具
运行以下命令以生成相应的验证器类文件 user_model.validator.dart
:
dart run build_runner build
步骤 3: 查看生成的验证器类
构建完成后,会生成 user_model.validator.dart
文件。以下是生成的文件内容:
// GENERATED CODE - DO NOT MODIFY BY HAND
// 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: '不是有效的电子邮件')
];
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: '不是有效的电子邮件')
],
),
ValidationData(
instanceMemberSymbol: 'password',
valueToValidate: instance.password,
annotations: [const IsNotEmptyStringValidator()],
)
];
// 验证器选项
const stopWhenFirstError = false;
return validateInstance(
validationDatas,
stopWhenFirstError: stopWhenFirstError,
);
}
}
使用验证器
现在你可以使用生成的验证器类来验证 UserModel
实例。
void main() {
final user = UserModel(email: '', password: '');
final validationResult = UserModelValidator.validate(user);
if (validationResult.isValid) {
print('表单验证通过');
} else {
print('表单验证失败');
validationResult.errors.forEach((error) {
print(error.message);
});
}
}
更多关于Flutter表单验证插件validator_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单验证插件validator_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
validator_generator
是一个用于生成 Flutter 表单验证代码的插件。它可以帮助你自动生成表单字段的验证逻辑,减少手动编写重复代码的工作量。以下是如何使用 validator_generator
插件的详细步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 validator_generator
和 build_runner
依赖:
dependencies:
flutter:
sdk: flutter
validators: ^0.3.0 # 或者其他版本
dev_dependencies:
build_runner: ^2.1.0
validator_generator: ^1.0.0 # 或者其他版本
然后运行 flutter pub get
来安装依赖。
2. 创建数据模型类
接下来,你需要创建一个数据模型类,并使用 [@Validator](/user/Validator)
注解来标记需要验证的字段。
import 'package:validator_generator/validator_generator.dart';
part 'user_model.g.dart'; // 生成的代码文件
[@Validator](/user/Validator)()
class UserModel {
@RequiredValidator(errorMessage: "Username is required")
String? username;
@EmailValidator(errorMessage: "Invalid email address")
String? email;
@MinLengthValidator(6, errorMessage: "Password must be at least 6 characters")
String? password;
}
3. 生成验证代码
运行以下命令来生成验证代码:
flutter pub run build_runner build
这将会生成一个 user_model.g.dart
文件,其中包含了自动生成的验证逻辑。
4. 使用生成的验证器
你可以在 Flutter 表单中使用生成的验证器。例如:
import 'package:flutter/material.dart';
import 'user_model.dart'; // 导入生成的文件
class MyForm extends StatefulWidget {
@override
_MyFormState createState() => _MyFormState();
}
class _MyFormState extends State<MyForm> {
final _formKey = GlobalKey<FormState>();
final _userModel = UserModel();
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Username'),
validator: _userModel.validateUsername,
onSaved: (value) => _userModel.username = value,
),
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: _userModel.validateEmail,
onSaved: (value) => _userModel.email = value,
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: _userModel.validatePassword,
onSaved: (value) => _userModel.password = value,
),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
// 处理表单提交
}
},
child: Text('Submit'),
),
],
),
);
}
}
5. 运行应用
现在你可以运行你的 Flutter 应用,并看到表单验证功能已经自动生成并集成到你的应用中。
6. 自定义验证器
如果你需要自定义验证器,可以在 [@Validator](/user/Validator)
注解中添加自定义的验证逻辑。例如:
[@Validator](/user/Validator)()
class UserModel {
[@CustomValidator](/user/CustomValidator)(
validate: (value) {
if (value != null && value.contains('admin')) {
return "Username cannot contain 'admin'";
}
return null;
},
errorMessage: "Invalid username"
)
String? username;
}