Flutter表单注解插件cumulations_form_annotations的使用

Flutter 表单注解插件 cumulations_form_annotations 的使用

在 Flutter 中,表单数据处理是一个常见的需求。cumulations_form_annotations 插件通过注解的方式简化了表单生成的过程。本文将介绍如何使用 cumulations_form_annotations 插件来创建一个简单的表单。

开始前的准备

确保你已经在项目的 pubspec.yaml 文件中添加了以下依赖:

dependencies:
  flutter:
    sdk: flutter
  cumulations_form_annotations: ^版本号

然后运行 flutter pub get 来安装依赖。

使用示例

1. 添加注解

首先,我们需要为表单字段添加注解。这些注解会帮助我们生成表单并进行验证。

import 'package:cumulations_form_annotations/cumulations_form_annotations.dart';

class User {
  @Field(label: '姓名')
  String name;

  @Field(label: '年龄', validators: [MinValueValidator(0), MaxValueValidator(150)])
  int age;

  @Field(label: '邮箱', validators: [EmailValidator()])
  String email;
}

2. 创建表单

接下来,我们将使用注解自动生成表单。

import 'package:flutter/material.dart';
import 'package:cumulations_form_annotations/cumulations_form_annotations.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('表单示例')),
        body: FormGenerator<User>(formModel: User()),
      ),
    );
  }
}

3. 自定义表单字段

如果你需要对表单字段进行更细粒度的控制,可以自定义表单字段。

class CustomForm extends StatefulWidget {
  [@override](/user/override)
  _CustomFormState createState() => _CustomFormState();
}

class _CustomFormState extends State<CustomForm> {
  final formKey = GlobalKey<FormState>();
  final user = User();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Form(
      key: formKey,
      child: Column(
        children: [
          TextFormField(
            decoration: InputDecoration(labelText: user.getField('name').label),
            validator: (value) {
              if (value == null || value.isEmpty) {
                return '请输入姓名';
              }
              return null;
            },
            onSaved: (value) => user.name = value!,
          ),
          TextFormField(
            decoration: InputDecoration(labelText: user.getField('age').label),
            keyboardType: TextInputType.number,
            validator: (value) {
              if (value == null || value.isEmpty) {
                return '请输入年龄';
              }
              final age = int.tryParse(value);
              if (age == null || age < 0 || age > 150) {
                return '年龄必须在0到150之间';
              }
              return null;
            },
            onSaved: (value) => user.age = int.parse(value!),
          ),
          TextFormField(
            decoration: InputDecoration(labelText: user.getField('email').label),
            keyboardType: TextInputType.emailAddress,
            validator: (value) {
              if (value == null || value.isEmpty) {
                return '请输入邮箱';
              }
              if (!RegExp(r'^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$').hasMatch(value)) {
                return '请输入有效的邮箱地址';
              }
              return null;
            },
            onSaved: (value) => user.email = value!,
          ),
          ElevatedButton(
            onPressed: () {
              if (formKey.currentState!.validate()) {
                formKey.currentState!.save();
                // 处理提交的数据
                print(user);
              }
            },
            child: Text('提交'),
          )
        ],
      ),
    );
  }
}

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

1 回复

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


cumulations_form_annotations 是一个用于简化 Flutter 表单处理的注解插件。它可以帮助开发者通过注解自动生成表单相关的代码,减少样板代码的编写,提高开发效率。以下是使用 cumulations_form_annotations 的基本步骤和示例。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 cumulations_form_annotationsbuild_runner 依赖:

dependencies:
  flutter:
    sdk: flutter
  cumulations_form_annotations: ^1.0.0  # 请根据实际情况使用最新版本

dev_dependencies:
  build_runner: ^2.1.0

然后,运行 flutter pub get 来获取依赖。

2. 创建表单模型类

接下来,创建一个表单模型类,并使用 @FormField 注解标记表单字段。例如:

import 'package:cumulations_form_annotations/cumulations_form_annotations.dart';

part 'user_form.g.dart';  // 自动生成的文件

@FormModel()
class UserForm {
  @FormField()
  String? name;

  @FormField()
  int? age;

  @FormField()
  String? email;
}

3. 生成代码

运行以下命令来生成表单相关的代码:

flutter pub run build_runner build

这将生成一个名为 user_form.g.dart 的文件,其中包含了表单验证、数据绑定等相关的代码。

4. 使用生成的表单模型

现在,你可以使用生成的表单模型来处理表单数据。例如:

import 'package:flutter/material.dart';
import 'user_form.dart';

class UserFormPage extends StatefulWidget {
  [@override](/user/override)
  _UserFormPageState createState() => _UserFormPageState();
}

class _UserFormPageState extends State<UserFormPage> {
  final _formKey = GlobalKey<FormState>();
  final _userForm = UserForm();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Form'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Name'),
                onSaved: (value) => _userForm.name = value,
                validator: _userForm.validateName,
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Age'),
                onSaved: (value) => _userForm.age = int.tryParse(value ?? ''),
                validator: _userForm.validateAge,
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                onSaved: (value) => _userForm.email = value,
                validator: _userForm.validateEmail,
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _submitForm,
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void _submitForm() {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      // 处理表单数据
      print('Name: ${_userForm.name}');
      print('Age: ${_userForm.age}');
      print('Email: ${_userForm.email}');
    }
  }
}
回到顶部