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

1 回复

更多关于Flutter数据验证插件validator_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


validator_annotation 是一个用于 Flutter 应用中进行数据验证的注解库。它允许你通过注解的方式对模型类中的字段进行验证,从而简化数据验证的流程。以下是如何使用 validator_annotation 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 validator_annotationvalidator_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});
}
回到顶部