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

1 回复

更多关于Flutter表单生成插件former_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


former_gen 是一个用于 Flutter 的代码生成插件,旨在简化表单处理和验证逻辑。它通过生成代码来减少样板代码的编写,使开发者能够更专注于业务逻辑。以下是如何使用 former_gen 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 former_genbuild_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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部