Flutter数据验证插件validify的使用
Flutter数据验证插件validify的使用
目录
特性
本仓库中的代码旨在简化您的Flutter项目中的验证过程。它包括:
- 自定义验证器:轻松创建和组合符合您需求的验证器。
- 同步和异步验证:支持两种类型的验证,包括远程检查和复杂操作。
- 内置验证器:包含各种常见的验证器,如必填字段、最小/最大长度、正则表达式匹配等。
- 灵活的错误信息:为每个验证规则定制错误信息。
安装
要将validify
用于您的Dart或Flutter项目,在pubspec.yaml
文件中添加以下依赖项:
dependencies:
validify: ^0.0.3
然后运行flutter pub get
以安装该包。
使用
class EmailValidator extends Validify {
[@override](/user/override)
List<ValidatorFunction> get validators => [
Validator.require(message: 'Email is required'),
Validator.pattern(r'^[^@]+@[^@]+\.[^@]+$', message: 'Invalid email format'),
];
}
TextFormField(
controller: _emailController,
decoration: const InputDecoration(
labelText: 'Email',
border: OutlineInputBorder(),
),
validator: EmailValidator().validate,
),
/// ------------ 或者 ------------
final ValidatorFunction _passwordValidator = Validators.combine([
Validators.require(message: 'Password is required'),
Validators.minLength(6, message: (length) => 'Password must be at least $length characters long'),
]);
TextFormField(
controller: _passwordController,
obscureText: true,
decoration: const InputDecoration(
labelText: 'Password',
border: OutlineInputBorder(),
),
validator: _passwordValidator,
),
API参考
验证器
一个用于创建和管理验证规则的实用类:
require({String? message})
: 检查值是否不为空的验证器。minLength(int length, {String? Function(int)? message})
: 最小长度验证器。maxLength(int length, {String? Function(int)? message})
: 最大长度验证器。pattern(RegExp pattern, {String? message})
: 正则表达式模式匹配验证器。combine(List<ValidatorFunction> validators)
: 组合多个验证器。equality(String firstValue, String secondValue, {required String message})
: 检查两个值是否相等。asyncPattern(RegExp pattern, {String? message})
: 异步正则表达式模式匹配验证器。custom({required bool Function(String? value) condition, required String message})
: 基于条件的自定义验证器。trimAndValidate(ValidatorFunction validator)
: 去除空格后应用提供的验证器。dateAfter(DateTime date, {String? message})
: 检查日期是否在指定日期之后的验证器。combineAsync(List<AsyncValidatorFunction> validators)
: 组合多个异步验证器。
为什么使用此系统?
- 可重用:一旦设置好,您可以跨不同项目重复使用这些验证器。
- 可扩展:轻松扩展和自定义验证器以适应特定用途。
- 代码清晰:通过抽象验证逻辑来鼓励清晰且可维护的代码。
Dart版本
sdk: '>=2.17.0 <4.0.0'
问题
请在GitHub页面上提交任何问题、错误报告或功能请求。
贡献
如果您希望为插件做出贡献(例如改进文档、解决错误或添加新功能),请仔细阅读我们的贡献指南,并发送您的拉取请求。
作者
这个validify
包由Bedirhan Sağlam开发。您可以通过bedirhansaglam270@gmail.com联系我。
许可证
MIT
示例代码
import 'package:flutter/material.dart';
import 'package:validify/validify.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData.light(),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _formKey = GlobalKey<FormState>();
final TextEditingController _emailController = TextEditingController();
final TextEditingController _passwordController = TextEditingController();
// 密码验证器使用Validators类
final ValidatorFunction _passwordValidator = Validators.combine([
Validators.require(message: 'Password is required'),
Validators.minLength(
6,
message: (length) => 'Password must be at least $length characters long',
),
]);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('验证器示例'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: <Widget>[
TextFormField(
controller: _emailController,
keyboardType: TextInputType.emailAddress,
textInputAction: TextInputAction.next,
decoration: const InputDecoration(
labelText: 'Email',
border: OutlineInputBorder(),
),
validator: _EmailValidator().validate,
),
const SizedBox(height: 16.0),
TextFormField(
controller: _passwordController,
obscureText: true,
decoration: const InputDecoration(
labelText: 'Password',
border: OutlineInputBorder(),
),
validator: _passwordValidator,
),
const SizedBox(height: 16.0),
ElevatedButton(
onPressed: () {
if (_formKey.currentState?.validate() ?? false) {
ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(
const SnackBar(content: Text('正在处理数据')),
);
}
},
child: const Text('提交'),
),
],
),
),
),
);
}
}
/// 使用这个[_EmailValidator]或者像这样:
///
/// ```dart
/// final ValidatorFunction _emailValidator = Validators.combine([
/// Validators.require(message: 'Email is required'),
/// Validators.pattern(RegExp(r'^[^@]+@[^@]+\.[^@]+$'), message: '无效的电子邮件格式'),
/// ]);
/// ```
class _EmailValidator extends Validify {
[@override](/user/override)
List<ValidatorFunction> get validators => [
Validators.require(message: 'Email is required'),
Validators.pattern(RegExp(r'^[^@]+@[^@]+\.[^@]+$'),
message: '无效的电子邮件格式'),
];
}
更多关于Flutter数据验证插件validify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据验证插件validify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用validify
插件进行数据验证的代码示例。validify
是一个用于Flutter的表单验证库,尽管它不是Flutter社区中最流行的验证库之一(如validator
或formz
),但它仍然提供了基本的数据验证功能。
首先,确保你已经在pubspec.yaml
文件中添加了validify
依赖:
dependencies:
flutter:
sdk: flutter
validify: ^最新版本号 # 请替换为实际可用的最新版本号
然后运行flutter pub get
来安装依赖。
接下来是一个简单的Flutter应用示例,展示了如何使用validify
进行数据验证:
import 'package:flutter/material.dart';
import 'package:validify/validify.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Validify Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _formKey = GlobalKey<FormState>();
String _email = '';
String _password = '';
ValidationResult _validationResult;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Validify Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
if (value.isEmpty) {
return 'Email is required';
}
_validationResult = validateEmail(value);
if (_validationResult != ValidationResult.valid) {
return 'Invalid email';
}
return null;
},
onChanged: (value) {
setState(() {
_email = value;
});
},
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
validator: (value) {
if (value.isEmpty || value.length < 6) {
return 'Password must be at least 6 characters long';
}
return null;
},
onChanged: (value) {
setState(() {
_password = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// If all validators pass, submit the form
print('Email: $_email');
print('Password: $_password');
// You can also check the email validation result here if needed
if (_validationResult == ValidationResult.valid) {
print('Email is valid');
} else {
print('Email is invalid (should not reach here if validator passed)');
}
}
},
child: Text('Submit'),
),
],
),
),
),
);
}
// Helper function to validate email using validify
ValidationResult validateEmail(String email) {
final emailRegex = RegExp(
r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"); // Simple email regex
return emailRegex.hasMatch(email) ? ValidationResult.valid : ValidationResult.invalid;
}
}
注意:在上面的代码中,validateEmail
函数实际上并没有直接使用validify
库的特定功能,因为validify
库通常用于更复杂的验证场景,并且其API可能与直接使用正则表达式不同。不过,由于validify
库的文档和示例可能有限,这里我展示了一个基于正则表达式的简单验证方法。
如果你确实想使用validify
库提供的功能,你可能需要查看其官方文档或源代码以了解如何正确集成和使用它。如果validify
库提供了特定的验证器类,你可能需要实例化这些类并使用它们来执行验证,而不是像上面那样直接使用正则表达式。
由于validify
库的具体用法可能会随着版本的更新而变化,因此建议查阅最新的官方文档以获取最准确的信息。如果validify
库不再维护或功能有限,你也可以考虑使用其他更流行的验证库,如validator
或formz
。