Flutter表单验证插件form_warden的使用
Flutter表单验证插件form_warden的使用
form_warden
是一个非常简单的包,旨在帮助你编写健壮、可重用且可扩展的验证规则,以配合你的Flutter表单。
如何工作
构建块
创建简单的或复杂的验证块,并将这些构建块组合起来形成Flutter验证器。每个块都有自己的逻辑、一套参数以创建动态验证器,并为每个块指定特定的错误消息。
有简单的验证器、可配置的验证器,甚至可以根据应用领域创建验证器。
创建一个守护者
一个守护者是一个包含多个验证块的集合。下面是一些示例,包括枚举和电子邮件模式检查。
安装
要使用此包,你需要在pubspec.yaml
文件中添加form_warden
作为依赖项。
使用
导入包
import 'package:form_warden/form_warden.dart';
必填字段(内置验证器)
TextFormField(
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: createWarden([Validators.required]),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: f.label,
),
onSaved: null,
),
必填邮箱字段(使用内置验证器)
TextFormField(
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: createWarden([Validators.required, Validators.email]),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: f.label,
),
onSaved: null,
),
自定义验证器
ValidatorFunction greaterThanTen = (value) {
if (value is int && value > 10) {
return null;
}
return "必须大于10";
};
TextFormField(
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: createWarden([greaterThanTen]),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: f.label,
),
onSaved: null,
)
组合多个验证器以创建强大的验证器
ValidatorFunction greaterThanTen = (value) {
if (value is int && value > 10) {
return null;
}
return "必须大于10";
};
ValidatorFunction lessThanHundred = (value) {
if (value is int && value < 100) {
return null;
}
return "必须小于100";
};
TextFormField(
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: createWarden([greaterThanTen, lessThanHundred]),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: f.label,
),
onSaved: null,
)
使用高阶函数创建可配置的验证器
ValidatorFunction between(int lowerLimit, int upperLimit) {
ValidatorFunction greaterThanLowerLimit = (dynamic? value) {
if (value.isEmpty) return null;
var _v = int.parse(value);
if (_v > lowerLimit && _v < upperLimit) return null;
return "值必须在$lowerLimit和$upperLimit之间";
};
return greaterThanLowerLimit;
}
TextFormField(
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: createWarden([between(10, 100)]),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: f.label,
),
onSaved: null,
)
示例代码
以下是一个完整的示例代码,展示了如何使用form_warden
来实现表单验证。
import 'package:flutter/material.dart';
import 'package:form_warden/form_warden.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Warden Example',
home: ExampleScreen(),
);
}
}
class _FormField {
final String label;
final List<dynamic Function(dynamic?)> validators;
_FormField(this.label, this.validators);
}
class ExampleScreen extends StatefulWidget {
const ExampleScreen({Key? key}) : super(key: key);
[@override](/user/override)
_ExampleScreenState createState() => _ExampleScreenState();
}
class _ExampleScreenState extends State<ExampleScreen> {
final _form = GlobalKey<FormState>();
late final List<_FormField> _formFields;
ValidatorFunction between(int lowerLimit, int upperLimit) {
ValidatorFunction greaterThanLowerLimit = (dynamic? value) {
if (value.isEmpty) return null;
var _v = int.parse(value);
if (_v > lowerLimit && _v < upperLimit) return null;
return "值必须在$lowerLimit和$upperLimit之间";
};
return greaterThanLowerLimit;
}
ValidatorFunction floatingPoint = (dynamic? value) {
if (value.isEmpty) return null;
try {
double.parse(value);
} on FormatException catch (_) {
return '请输入有效值';
}
return null;
};
ValidatorFunction number = (dynamic? value) {
if (value.isEmpty) return null;
try {
int.parse(value);
} on FormatException catch (_) {
return '请输入有效值';
}
return null;
};
[@override](/user/override)
void initState() {
super.initState();
this._formFields = [
_FormField(
"姓名",
[Validators.required],
),
_FormField(
"仅浮点数",
[Validators.required, floatingPoint],
),
_FormField(
"介于10和100之间",
[Validators.required, number, between(10, 100)],
),
_FormField(
"有效邮箱",
[Validators.required, Validators.email],
),
];
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Warden Example"),
),
body: Container(
child: Form(
key: this._form,
child: Padding(
padding: const EdgeInsets.only(top: 8.0, left: 8.0, right: 8.0),
child: Wrap(
alignment: WrapAlignment.center,
runSpacing: 20,
children: [
..._formFields.map(
(f) => TextFormField(
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: createWarden(f.validators),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: f.label,
),
onSaved: null,
),
),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: () {
this._form.currentState!.validate();
},
child: Text('验证'),
),
)
],
),
),
),
),
);
}
}
更多关于Flutter表单验证插件form_warden的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单验证插件form_warden的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
form_warden
是一个用于 Flutter 表单验证的插件,它提供了一种简洁且灵活的方式来验证表单字段。通过使用 form_warden
,你可以轻松地定义验证规则并将它们应用到表单字段上,从而确保用户输入的数据符合预期。
以下是一个简单的使用 form_warden
插件的示例:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 form_warden
依赖:
dependencies:
flutter:
sdk: flutter
form_warden: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 创建表单并应用验证规则
接下来,你可以创建一个简单的表单,并使用 form_warden
来验证表单字段。
import 'package:flutter/material.dart';
import 'package:form_warden/form_warden.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Form Warden Example')),
body: MyForm(),
),
);
}
}
class MyForm extends StatefulWidget {
@override
_MyFormState createState() => _MyFormState();
}
class _MyFormState extends State<MyForm> {
final _formKey = GlobalKey<FormState>();
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
@override
void dispose() {
_emailController.dispose();
_passwordController.dispose();
super.dispose();
}
void _submitForm() {
if (_formKey.currentState!.validate()) {
// 表单验证通过,处理提交逻辑
print('Email: ${_emailController.text}');
print('Password: ${_passwordController.text}');
}
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
controller: _emailController,
decoration: InputDecoration(labelText: 'Email'),
validator: FormWarden([
RequiredValidator(errorText: 'Email is required'),
EmailValidator(errorText: 'Enter a valid email address'),
]),
),
SizedBox(height: 16.0),
TextFormField(
controller: _passwordController,
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: FormWarden([
RequiredValidator(errorText: 'Password is required'),
MinLengthValidator(
minLength: 6,
errorText: 'Password must be at least 6 characters',
),
]),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: _submitForm,
child: Text('Submit'),
),
],
),
),
);
}
}
3. 解释代码
-
FormWarden: 这是一个验证器组合器,它允许你将多个验证器组合在一起。你可以将多个验证规则传递给
FormWarden
,它会依次执行这些规则。 -
RequiredValidator: 验证字段是否为空。如果字段为空,则返回指定的错误信息。
-
EmailValidator: 验证输入的文本是否符合电子邮件格式。
-
MinLengthValidator: 验证输入的文本是否达到最小长度要求。
4. 运行应用程序
运行应用程序后,你会看到一个简单的表单。当用户输入数据并提交表单时,form_warden
会根据你定义的验证规则进行验证。如果验证失败,相应的错误信息会显示在表单字段下方。
5. 自定义验证器
如果你需要自定义验证规则,你可以通过继承 FieldValidator
类来实现自己的验证器。例如:
class CustomValidator extends FieldValidator<String> {
CustomValidator({required String errorText}) : super(errorText);
@override
bool isValid(String? value) {
// 自定义验证逻辑
return value != null && value.contains('custom');
}
}
然后你可以像使用其他验证器一样使用它:
validator: FormWarden([
CustomValidator(errorText: 'Input must contain "custom"'),
]),