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
更多关于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
提供了一些内置的验证器,如 RequiredValidator
、EmailValidator
、MinLengthValidator
等。
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();
}