Flutter表单生成插件former_gen的使用
Flutter表单生成插件former_gen的使用
前言
former_gen
是一个用于生成表单代码的插件,可以帮助开发者快速构建表单类。它通过代码生成的方式简化了表单的创建过程,并提供了强大的功能来验证表单字段。
使用步骤
以下是使用 former_gen
的详细步骤:
1. 安装依赖
确保你的项目中已经安装了 build_runner
。如果没有安装,可以通过以下命令安装:
flutter pub add build_runner
2. 创建表单类并添加注解
在你的表单类上添加 @Formable
注解。例如:
import 'package:former/annotations.dart';
@Formable()
class MyForm {
// 表单字段定义
}
3. 添加生成文件引用
在表单类之前添加以下代码:
part 'my_form.g.dart';
注意:my_form.g.dart
是生成文件的名称,可以根据实际文件名调整。
4. 扩展生成的类
扩展生成的类以使用生成的功能。例如:
class MyForm = _MyForm with _$MyFormIndexable;
5. 运行代码生成器
运行以下命令以生成代码:
flutter pub run build_runner build
生成的 .g.dart
文件将位于与表单类相同的目录下。
生成的内容
1. 可用的混入类
生成的代码包括一个混入类,使表单类支持通过方括号操作符访问字段。例如:
void main() {
final form = MyForm();
form['name'] = 'John Doe'; // 使用方括号访问字段
print(form['name']); // 输出 'John Doe'
}
2. 字段枚举类
生成的代码还包括一个枚举类,包含表单的所有字段。该枚举类通常用于指定 Former
小部件应控制的字段。例如:
enum MyFormField {
name,
email,
age,
}
3. 表单验证类
当你使用 Former
小部件时,需要创建一个表单验证类。该类可以使用内置的验证器或自定义实现。例如:
class MyFormSchema extends FormSchema {
[@override](/user/override)
Map<String, Validator> get fields => {
'name': RequiredValidator(),
'email': EmailValidator(),
'age': MinValueValidator(18),
};
}
示例代码
以下是一个完整的示例,展示如何使用 former_gen
构建表单。
1. 定义表单类
import 'package:former/annotations.dart';
@Formable()
class UserForm {
String? name;
String? email;
int? age;
}
2. 添加生成文件引用
part 'user_form.g.dart';
3. 扩展生成的类
class UserForm = _UserForm with _$UserFormIndexable;
4. 创建表单验证类
import 'package:former/form_schema.dart';
class UserFormSchema extends FormSchema {
[@override](/user/override)
Map<String, Validator> get fields => {
'name': RequiredValidator(),
'email': EmailValidator(),
'age': MinValueValidator(18),
};
}
5. 使用表单
import 'package:flutter/material.dart';
import 'package:former/former.dart';
import 'user_form.g.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Form Example')),
body: FormExample(),
),
);
}
}
class FormExample extends StatefulWidget {
[@override](/user/override)
_FormExampleState createState() => _FormExampleState();
}
class _FormExampleState extends State<FormExample> {
final UserForm _form = UserForm();
[@override](/user/override)
Widget build(BuildContext context) {
return Former(
schema: UserFormSchema(),
builder: (context, state) {
return Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Name'),
onChanged: (value) => _form['name'] = value,
),
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
onChanged: (value) => _form['email'] = value,
),
TextFormField(
decoration: InputDecoration(labelText: 'Age'),
onChanged: (value) => _form['age'] = int.tryParse(value),
),
ElevatedButton(
onPressed: () {
if (_form.validate()) {
print('Form is valid!');
} else {
print('Form is invalid!');
}
},
child: Text('Submit'),
),
],
);
},
);
}
}
更多关于Flutter表单生成插件former_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单生成插件former_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
former_gen
是一个用于 Flutter 的代码生成插件,旨在简化表单处理和验证逻辑。它通过生成代码来减少样板代码的编写,使开发者能够更专注于业务逻辑。以下是如何使用 former_gen
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 former_gen
和 build_runner
依赖。
dependencies:
flutter:
sdk: flutter
former: ^0.0.1 # 请确保使用最新版本
dev_dependencies:
build_runner: ^2.1.0
former_gen: ^0.0.1 # 请确保使用最新版本
2. 创建一个表单模型
接下来,你需要创建一个表单模型类,并使用 @Former
注解标记它。这个类将包含表单的字段以及验证逻辑。
import 'package:former/former.dart';
import 'package:former_gen/former_gen.dart';
part 'login_form.g.dart'; // 生成的代码将放在这里
@Former()
class LoginForm extends FormerModel {
@FormField(
validators: [RequiredValidator()],
)
String username;
@FormField(
validators: [RequiredValidator(), MinLengthValidator(6)],
)
String password;
}
3. 运行代码生成器
使用 build_runner
生成代码。在终端中运行以下命令:
flutter pub run build_runner build
这将生成 login_form.g.dart
文件,其中包含表单的处理逻辑。
4. 使用生成的表单逻辑
现在,你可以在你的 Flutter 应用中使用生成的表单逻辑。
import 'package:flutter/material.dart';
import 'login_form.dart'; // 导入生成的表单模型
class LoginPage extends StatelessWidget {
final _form = LoginForm();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Login'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Username'),
onChanged: (value) => _form.username = value,
validator: _form.validateUsername,
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
onChanged: (value) => _form.password = value,
validator: _form.validatePassword,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_form.validate()) {
// 表单验证通过,执行登录逻辑
print('Username: ${_form.username}');
print('Password: ${_form.password}');
} else {
// 表单验证失败,显示错误信息
print('Validation failed');
}
},
child: Text('Login'),
),
],
),
),
),
);
}
}