Flutter表单处理插件bond_form的使用

Flutter表单处理插件bond_form的使用

bond_form 包为 Flutter 应用程序提供了一个强大且灵活的解决方案来管理表单状态。它引入了几个类和工具,简化了表单验证、提交和错误处理的过程。

这个包非常适合那些希望简化表单管理逻辑的人,无论是简单的登录表单还是复杂的多步骤注册流程。

Pub 版本 许可证: MIT

目录

功能

  • 简单易用的表单管理 API
  • 内置验证逻辑
  • 可自定义的表单字段
  • 响应式状态管理
  • 支持异步表单提交
  • 易于扩展

安装

要使用 bond_form,只需在你的 pubspec.yaml 文件中添加它作为依赖项:

dependencies:
  bond_form: ^0.0.1

如果你想要使用 Riverpod 集成,添加以下依赖项:

dependencies:
  bond_form_riverpod: ^0.0.1

并且不需要单独添加 bond_form 依赖,它会自动包含在内。

使用

以下是一个简单的示例,展示了如何使用 bond_form 来创建和管理一个登录表单:

import 'package:bond_form/bond_form.dart';

// 创建一个表单状态对象
final loginForm = BondFormState<String, String>(
  fields: {
    'email': TextFieldState<String>(
      null,
      label: 'Email',
      rules: [
        Rules.required(), // 必填规则
        Rules.email(), // 邮箱格式规则
      ],
    ),
    'password': TextFieldState<String>(
      null,
      label: 'Password',
      rules: [
        Rules.required(), // 必填规则
        Rules.minLength(8), // 最小长度规则
      ],
    ),
  },
);

// 创建一个控制器来更新表单字段
final loginController = FormController<BondFormState<String, String>>();

void main() {
  // 更新表单字段
  loginController.updateText(loginForm, 'email', 'salahnahed@icloud.com');
  loginController.updateText(loginForm, 'password', 'password123');

  // 打印更新后的值
  print('Email value: ${loginController.textFieldValue(loginForm, 'email')}');
  print('Password value: ${loginController.textFieldValue(loginForm, 'password')}');

  // 假设我们现在要提交表单
  loginController.submit(loginForm);
}

文档

有关如何使用 form_bond 的详细指南,请参阅 bond_docs 存储库中的 forms.md 文件。

阅读完整文档

贡献

欢迎贡献!不过,我们目前还没有具体的贡献指南。如果您有兴趣贡献,请随时打开拉取请求或问题,我们将很高兴讨论并审查您的更改。

许可证

Bond Core 是根据 MIT 许可证授权的。


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

1 回复

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


bond_form 是一个用于简化 Flutter 表单处理的插件,它可以帮助开发者更轻松地管理表单状态、验证和提交。bond_form 提供了一种声明式的方式来定义表单字段、验证规则和提交逻辑。

以下是 bond_form 的基本使用步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  bond_form: ^1.0.0  # 请使用最新版本

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

2. 创建表单模型

使用 bond_form 时,首先需要定义一个表单模型。这个模型将包含表单字段、验证规则和提交逻辑。

import 'package:bond_form/bond_form.dart';

class LoginForm extends FormModel {
  final email = TextField(
    name: 'email',
    rules: [
      RequiredRule('Email is required'),
      EmailRule('Invalid email format'),
    ],
  );

  final password = TextField(
    name: 'password',
    rules: [
      RequiredRule('Password is required'),
      MinLengthRule(6, 'Password must be at least 6 characters'),
    ],
  );

  @override
  List<FormField> get fields => [email, password];

  Future<void> submit() async {
    if (validate()) {
      // 表单验证通过,执行提交逻辑
      print('Email: ${email.value}');
      print('Password: ${password.value}');
      // 这里可以调用 API 或其他业务逻辑
    }
  }
}

3. 在 UI 中使用表单

在 Flutter 的 UI 中,可以使用 FormBuilderFormModel 来构建表单。

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

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final _form = LoginForm();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Login'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: FormBuilder(
          form: _form,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                onChanged: _form.email.setValue,
                validator: _form.email.validate,
              ),
              SizedBox(height: 16),
              TextFormField(
                decoration: InputDecoration(labelText: 'Password'),
                obscureText: true,
                onChanged: _form.password.setValue,
                validator: _form.password.validate,
              ),
              SizedBox(height: 32),
              ElevatedButton(
                onPressed: _form.submit,
                child: Text('Login'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

4. 表单验证与提交

LoginForm 中,validate() 方法用于验证所有字段。如果所有字段都通过验证,submit() 方法将会执行提交逻辑。

5. 自定义验证规则

bond_form 允许你自定义验证规则。你可以通过继承 Rule 类来实现自定义规则。

class CustomRule extends Rule {
  CustomRule(String message) : super(message);

  @override
  bool validate(String value) {
    // 自定义验证逻辑
    return value.contains('custom');
  }
}

6. 表单字段类型

bond_form 支持多种表单字段类型,如 TextFieldNumberFieldDateField 等。你可以根据需求选择合适的字段类型。

7. 表单状态管理

bond_form 还提供了表单状态管理功能,你可以监听表单的状态变化,如字段值变化、验证状态变化等。

_form.email.addListener(() {
  print('Email changed: ${_form.email.value}');
});
回到顶部