Flutter表单验证插件flutter_laravel_form_validation的使用
Flutter表单验证插件flutter_laravel_form_validation的使用
Flutter Laravel Form Validation 是一个基于Dart扩展的简化版Flutter表单验证库,灵感来源于Laravel验证。
🎖 安装
在pubspec.yaml
文件中添加依赖:
dependencies:
flutter_laravel_form_validation: ^1.0.4
然后运行flutter pub get
来安装包。
⚡️ 导入
在Dart文件中导入此库:
import 'package:flutter_laravel_form_validation/flutter_laravel_form_validation.dart';
🎮 使用方法
验证规则列表(短形式,无标签或自定义消息)
直接在TextFormField
中使用字符串列表作为验证器:
TextFormField(
validator : ['required','max:10','uppercase'].v,
),
或者使用FLValidator
类的方法:
TextFormField(
validator : [FLValidator.required, FLValidator.max(10), FLValidator.uppercase].v,
),
自定义验证函数
可以将自定义验证函数与内置验证器一起使用:
TextFormField(
validator : [FLValidator.required, customValidation].v,
),
String? customValidation(String? value) {
if (value == "flutterdev") {
return "Value cannot be flutterdev";
}
return null;
}
字符串形式的验证规则(短形式,无标签或自定义消息)
可以直接用管道符号分隔的字符串表示多个验证规则:
TextFormField(
validator : "required|max:10|uppercase".v,
),
带有标签或自定义消息的验证规则列表
可以在验证时指定字段名称和自定义错误信息:
TextFormField(
validator : ['required', 'max:10', 'uppercase'].validate(
attribute: 'Username',
customMessages: {
'required': "You must input your username",
'max': "The length must be 10",
'uppercase': "Only uppercase is allowed"
},
),
),
也可以对字符串形式的验证规则做同样的处理:
TextFormField(
validator : "required|max:10|uppercase".validate(
attribute: 'Username',
customMessages: {
'required': "You must input your username",
'max': "The length must be 10",
'uppercase': "Only uppercase is allowed"
},
),
),
规则列表
以下是部分可用的验证规则及其示例:
类属性 | 字符串 | 描述 | 示例 |
---|---|---|---|
FLValidator.required |
required | 确保字段值是必填项 | ['required'] 或 'required' 或 [FLValidator.required] |
FLValidator.numeric |
numeric | 确保字段值是数字 | ['numeric'] 或 'numeric' 或 [FLValidator.numeric] |
… | … | … | … |
更多规则请参见原文档表格。
示例代码
以下是一个完整的示例应用,展示了如何使用flutter_laravel_form_validation
进行表单验证:
import 'package:flutter/material.dart';
import 'package:flutter_laravel_form_validation/extensions/extensions.dart';
import 'package:flutter_laravel_form_validation/flutter_laravel_form_validation.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late GlobalKey<FormState> formKey;
var _autoValidateMode = AutovalidateMode.disabled;
@override
void initState() {
super.initState();
formKey = GlobalKey<FormState>();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(
padding: const EdgeInsets.all(40.0),
child: Form(
autovalidateMode: _autoValidateMode,
key: formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
key: const Key("username"),
validator: [
FLValidator.required,
FLValidator.max(10),
FLValidator.email,
FLValidator.uppercase,
FLValidator.same("man"),
].validate(attribute: "Username fullname"),
),
const SizedBox(height: 10),
TextFormField(
key: const Key("customval"),
decoration: const InputDecoration(hintText: "Custom validation"),
validator: [FLValidator.required, customValidation].v,
),
const SizedBox(height: 10),
TextFormField(
key: const Key("email"),
validator: 'required|email'.v,
),
const SizedBox(height: 10),
TextFormField(
key: const Key("fullname"),
validator: ['required', 'uppercase'].v,
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: handleSubmit,
child: const Text("Submit"),
)
],
),
),
),
);
}
void handleSubmit() {
final formState = formKey.currentState;
if (formState == null) {
return;
}
if (!formState.validate()) {
setState(() {
_autoValidateMode = AutovalidateMode.always;
});
} else {
// 表单验证通过后的逻辑
}
}
}
// 自定义验证函数
String? customValidation(String? value) {
if (value == "flutterdev") {
return "Value cannot be flutterdev";
}
return null;
}
以上就是关于flutter_laravel_form_validation
的基本介绍和使用方法。如果有任何问题或建议,欢迎随时提出!
更多关于Flutter表单验证插件flutter_laravel_form_validation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单验证插件flutter_laravel_form_validation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用flutter_laravel_form_validation
插件进行表单验证的一个示例。这个插件允许你将Laravel风格的验证规则应用到Flutter表单中。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_laravel_form_validation
依赖:
dependencies:
flutter:
sdk: flutter
flutter_laravel_form_validation: ^最新版本号 # 请替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个完整的示例,展示如何使用这个插件进行表单验证:
import 'package:flutter/material.dart';
import 'package:flutter_laravel_form_validation/flutter_laravel_form_validation.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Laravel Form Validation Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: FormValidationDemo(),
),
),
);
}
}
class FormValidationDemo extends StatefulWidget {
@override
_FormValidationDemoState createState() => _FormValidationDemoState();
}
class _FormValidationDemoState extends State<FormValidationDemo> {
final formKey = GlobalKey<FormState>();
final TextEditingController nameController = TextEditingController();
final TextEditingController emailController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
return Form(
key: formKey,
child: Column(
children: [
TextFormField(
controller: nameController,
decoration: InputDecoration(labelText: 'Name'),
validator: (value) {
if (value.isEmpty || value.length < 3) {
return 'Name must be at least 3 characters long';
}
return null;
},
),
TextFormField(
controller: emailController,
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
// 使用 flutter_laravel_form_validation 提供的验证器
final validator = LaravelValidator(rules: {
'email': 'required|email',
});
final result = validator.validate({'email': value});
if (result.isNotEmpty) {
return result.first;
}
return null;
},
),
TextFormField(
controller: passwordController,
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: (value) {
if (value.isEmpty || value.length < 6) {
return 'Password must be at least 6 characters long';
}
return null;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if (formKey.currentState!.validate()) {
// 可以在这里添加提交表单的逻辑
print('Form submitted');
print('Name: ${nameController.text}');
print('Email: ${emailController.text}');
print('Password: ${passwordController.text}');
} else {
// 使用 flutter_laravel_form_validation 提供的全局验证
final globalValidator = LaravelValidator(rules: {
'name': 'required|min:3',
'email': 'required|email',
'password': 'required|min:6',
});
final globalResults =
globalValidator.validate({
'name': nameController.text,
'email': emailController.text,
'password': passwordController.text,
});
if (globalResults.isNotEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(globalResults.first),
),
);
}
}
},
child: Text('Submit'),
),
],
),
);
}
@override
void dispose() {
nameController.dispose();
emailController.dispose();
passwordController.dispose();
super.dispose();
}
}
在这个示例中:
- 我们创建了一个简单的Flutter表单,包含名称、电子邮件和密码字段。
- 对于电子邮件字段,我们使用了
flutter_laravel_form_validation
插件提供的验证器来进行验证。 - 在提交按钮的点击事件中,我们首先使用Flutter内置的表单验证,然后使用
flutter_laravel_form_validation
插件提供的全局验证器进行二次验证。
注意:这个插件的API可能会随着版本的更新而变化,因此请参考最新的文档和示例代码。