Flutter表单验证插件formgaurd的使用

Flutter表单验证插件FormGuard的使用

FormGuard 是一个用于Flutter的强大、灵活且可定制的验证库,它帮助开发者轻松验证常见的输入字段,如电子邮件、电话号码和密码。

功能

1. 邮箱验证

EmailValidator 设计用于根据可配置规则验证电子邮件地址。它可以确保正确的格式,防止常见的错误,并可选地阻止临时邮箱地址。

import 'package:formgaurd/validators/email_validator.dart';

void main() {
  // 配置验证选项
  EmailValidationOptions options = EmailValidationOptions(
    checkFormat: true,
    preventConsecutiveDots: true,
    preventMultipleAtSymbols: true,
    checkCommonMistakes: true,
    preventDisposableEmails: true,
    checkEndsWithDot: true,
    minLength: 6,
  );

  // 创建 EmailValidator 实例
  EmailValidator validator = EmailValidator(options: options);

  // 示例邮箱输入
  String email1 = "test@example.com";
  String email2 = "invalid..email@@example.com";

  // 验证邮箱
  print(validator.validate(email1)); // 输出: null (有效邮箱)
  print(validator.validate(email2)); // 输出: 错误信息 (无效邮箱)
}

解释:

  • 有效邮箱 (email1): 满足所有验证规则。
  • 无效邮箱 (email2): 因连续的点和多个 @ 符号而失败。
  • validate 方法返回 null 表示输入有效,否则返回错误信息。

2. 电话号码验证

PhoneValidator 帮助验证特定国家的电话号码,强制执行最小和最大长度,并可选地防止特殊字符。

import 'package:formgaurd/validators/phone_number_validator.dart';
import 'package:formgaurd/enums.dart';

void main() {
  // 配置验证选项
  PhoneValidationOptions options = PhoneValidationOptions(
    rules: [
      PhoneValidationRule.checkFormat,
      PhoneValidationRule.checkMinLength,
      PhoneValidationRule.checkMaxLength,
      PhoneValidationRule.checkStartsWithCountryCode,
    ],
    minLength: 10,
    maxLength: 15,
    allowedCountryCodes: [
      CountryCode.India,
      CountryCode.UnitedStates,
    ],
    checkCountryCode: true,
  );

  // 创建 PhoneValidator 实例
  PhoneValidator validator = PhoneValidator(options);

  // 示例电话号码
  String phone1 = "+919876543210"; // 有效的电话号码
  String phone2 = "12345";         // 无效的电话号码 (太短)

  // 验证电话号码
  print(validator.validate(phone1)); // 输出: null (有效电话号码)
  print(validator.validate(phone2)); // 输出: 错误信息 (无效电话号码)
}

解释:

  • 有效电话 (phone1): 以国家代码开始并满足长度规则。
  • 无效电话 (phone2): 太短,不符合电话号码的要求。
  • validate 方法检查号码是否符合配置的规则。

3. 密码验证

PasswordValidator 确保密码达到强度要求。你可以根据应用需求将其设置为弱、中等或强。

import 'package:formgaurd/validators/password_validator.dart';
import 'package:formgaurd/enums.dart';

void main() {
  // 创建 PasswordValidator 实例
  PasswordValidator validator = PasswordValidator()
      .setStrength(PasswordStrength.strong);

  // 示例密码
  String password1 = "P@ssw0rd123"; // 强密码
  String password2 = "12345";       // 弱密码

  // 验证密码
  print(validator.validate(password1)); // 输出: null (有效密码)
  print(validator.validate(password2)); // 输出: 错误信息 (无效密码)
}

解释:

  • 强密码 (password1): 包含大写、小写字母、数字和符号。
  • 弱密码 (password2): 缺乏复杂性和强度。
  • validate 方法检查密码是否符合设定的规则。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  formgaurd: <latest_version>

示例代码

import 'package:flutter/material.dart';
import 'package:formgaurd/utils/enums/country_code_enum.dart';
import 'package:formgaurd/utils/enums/password_strength_enum.dart';
import 'package:formgaurd/utils/enums/phone_validation_rules_enum.dart';
import 'package:formgaurd/validators/email_validator.dart';
import 'package:formgaurd/validators/password_validator.dart';
import 'package:formgaurd/validators/phone_number_validator.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('FormGuard 示例')),
        body: const MyForm(),
      ),
    );
  }
}

class MyForm extends StatefulWidget {
  const MyForm({super.key});

  [@override](/user/override)
  State<MyForm> createState() => _MyFormState();
}

class _MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: _formKey,
        child: Column(
          children: [
            // 邮箱验证
            TextFormField(
              decoration: const InputDecoration(labelText: '邮箱'),
              autovalidateMode: AutovalidateMode.onUserInteraction,
              validator: (value) {
                EmailValidationOptions options = EmailValidationOptions(
                  checkFormat: true,
                  preventConsecutiveDots: true,
                  preventMultipleAtSymbols: true,
                  checkCommonMistakes: true,
                  preventDisposableEmails: true,
                  checkEndsWithDot: true,
                  minLength: 6,
                );

                EmailValidator validator = EmailValidator(options: options);
                String? result = validator.validate(value ?? '');
                return result;
              },
            ),
            const SizedBox(height: 16),

            // 电话号码验证
            TextFormField(
              decoration: const InputDecoration(labelText: '电话号码'),
              autovalidateMode: AutovalidateMode.onUserInteraction,
              validator: (value) {
                PhoneValidationOptions options = const PhoneValidationOptions(
                  rules: [
                    PhoneValidationRule.checkFormat,
                    PhoneValidationRule.checkMinLength,
                    PhoneValidationRule.checkStartsWithCountryCode,
                    PhoneValidationRule.checkMaxLength,
                    PhoneValidationRule.preventSpecialCharacters,
                  ],
                  minLength: 10,
                  maxLength: 15,
                  allowedCountryCodes: [
                    CountryCode.India,
                    CountryCode.UnitedStates,
                    CountryCode.Bermuda,
                  ],
                  allowSpecialCharacters: false,
                  checkCountryCode: true,
                );

                PhoneValidator phoneValidator = PhoneValidator(options);
                String? result = phoneValidator.validate(value ?? '');
                return result;
              },
            ),
            const SizedBox(height: 16),

            // 密码验证
            TextFormField(
              decoration: const InputDecoration(labelText: '密码'),
              autovalidateMode: AutovalidateMode.onUserInteraction,
              obscureText: true,
              validator: (value) {
                PasswordValidator strongValidator =
                    PasswordValidator().setStrength(PasswordStrength.strong);

                String? result = strongValidator.validate(value ?? '');
                return result;
              },
            ),
            const SizedBox(height: 16),

            // 提交按钮
            ElevatedButton(
              onPressed: () {
                if (_formKey.currentState!.validate()) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    const SnackBar(content: Text('表单有效!')),
                  );
                }
              },
              child: const Text('提交'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


formgaurd 是一个用于 Flutter 应用的表单验证插件,它可以帮助开发者轻松地管理和验证表单数据。通过 formgaurd,你可以定义验证规则、处理表单提交以及显示验证错误信息。以下是 formgaurd 的基本使用步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 formgaurd 依赖:

dependencies:
  flutter:
    sdk: flutter
  formgaurd: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在需要使用 formgaurd 的文件中导入包:

import 'package:formgaurd/formgaurd.dart';

3. 创建表单控制器

formgaurd 提供了一个 FormGuardController 来管理表单的状态和验证规则。

final formController = FormGuardController();

4. 定义验证规则

你可以在表单字段上定义验证规则。formgaurd 提供了一些内置的验证器,如 RequiredValidatorEmailValidatorMinLengthValidator 等。

formController.addField(
  'username',
  validators: [
    RequiredValidator(errorText: 'Username is required'),
    MinLengthValidator(3, errorText: 'Username must be at least 3 characters'),
  ],
);

formController.addField(
  'email',
  validators: [
    RequiredValidator(errorText: 'Email is required'),
    EmailValidator(errorText: 'Invalid email address'),
  ],
);

5. 构建表单 UI

在构建表单 UI 时,你可以使用 FormGuard 提供的 TextField 或其他输入组件,并将它们与 formController 绑定。

FormGuard(
  controller: formController,
  child: Column(
    children: [
      TextFormField(
        decoration: InputDecoration(labelText: 'Username'),
        onChanged: (value) {
          formController.updateField('username', value);
        },
      ),
      TextFormField(
        decoration: InputDecoration(labelText: 'Email'),
        onChanged: (value) {
          formController.updateField('email', value);
        },
      ),
      ElevatedButton(
        onPressed: () {
          if (formController.validate()) {
            // 表单验证通过,处理提交逻辑
            print('Form submitted successfully');
          }
        },
        child: Text('Submit'),
      ),
    ],
  ),
);

6. 处理表单提交

在提交表单时,调用 formController.validate() 方法进行验证。如果验证通过,你可以继续处理提交逻辑。

ElevatedButton(
  onPressed: () {
    if (formController.validate()) {
      // 表单验证通过,处理提交逻辑
      print('Form submitted successfully');
    }
  },
  child: Text('Submit'),
);

7. 显示验证错误信息

formController 会自动管理每个字段的验证状态和错误信息。你可以通过 formController.getFieldError('fieldName') 获取某个字段的错误信息,并在 UI 中显示。

Text(
  formController.getFieldError('username') ?? '',
  style: TextStyle(color: Colors.red),
);

8. 清理资源

在页面销毁时,记得调用 formController.dispose() 来释放资源。

[@override](/user/override)
void dispose() {
  formController.dispose();
  super.dispose();
}
回到顶部