Flutter表单管理插件formux的使用

Flutter表单管理插件formux的使用

特性

formux 是一个用于简化 Flutter 表单验证的工具集。以下是它的主要特性:

  • ✅ 支持表单验证
  • 🧩 支持 BLoC 模式
  • 🌍 可以获取数据
  • 🪄 提供错误验证消息
  • 📦 提供可用组件

使用步骤

1. 添加依赖到项目

在您的 pubspec.yaml 文件中添加 formux 依赖:

dependencies:
  formux: ^x.x.x # 替换为最新版本号

然后运行以下命令安装依赖:

$ flutter pub get

2. 创建一个简单的表单示例

我们将通过一个简单的例子展示如何使用 formux 来创建一个具有表单验证的页面。

示例代码

import 'package:flutter/material.dart';
import 'package:formux/formux.dart'; // 导入 formux 包

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Formux 示例',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const FormExamplePage(),
    );
  }
}

class FormExamplePage extends StatefulWidget {
  const FormExamplePage({super.key});

  [@override](/user/override)
  State<FormExamplePage> createState() => _FormExamplePageState();
}

class _FormExamplePageState extends State<FormExamplePage> {
  final FormController _formController = FormController(); // 创建 FormController

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Formux 示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          controller: _formController, // 绑定控制器
          child: Column(
            children: [
              TextFormField(
                controller: TextEditingController(),
                validator: Validator.required('用户名不能为空'), // 必填字段验证
                decoration: const InputDecoration(labelText: '用户名'),
              ),
              TextFormField(
                controller: TextEditingController(),
                validator: Validator.email('请输入有效的邮箱地址'), // 邮箱格式验证
                decoration: const InputDecoration(labelText: '邮箱'),
              ),
              ElevatedButton(
                onPressed: () {
                  if (_formController.validate()) {
                    // 表单验证成功
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text('表单提交成功')),
                    );
                  } else {
                    // 表单验证失败
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text('表单验证失败')),
                    );
                  }
                },
                child: const Text('提交'),
              )
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


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

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

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 formux 依赖:

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

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

2. 导入包

在你的 Dart 文件中导入 formux

import 'package:formux/formux.dart';

3. 创建表单

使用 Formux 来创建表单,并定义表单字段和验证规则。

class MyForm extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Formux(
      fields: {
        'username': FormuxField(
          initialValue: '',
          validators: [
            FormuxValidator.required('Username is required'),
            FormuxValidator.minLength(3, 'Username must be at least 3 characters'),
          ],
        ),
        'password': FormuxField(
          initialValue: '',
          validators: [
            FormuxValidator.required('Password is required'),
            FormuxValidator.minLength(6, 'Password must be at least 6 characters'),
          ],
        ),
      },
      onSubmit: (values) {
        // 处理表单提交
        print('Form submitted with values: $values');
      },
      child: MyFormContent(),
    );
  }
}

class MyFormContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final form = Formux.of(context);

    return Column(
      children: [
        TextFormField(
          decoration: InputDecoration(labelText: 'Username'),
          onChanged: (value) => form.setValue('username', value),
        ),
        TextFormField(
          decoration: InputDecoration(labelText: 'Password'),
          obscureText: true,
          onChanged: (value) => form.setValue('password', value),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: () {
            if (form.validate()) {
              form.submit();
            }
          },
          child: Text('Submit'),
        ),
      ],
    );
  }
}

4. 解释代码

  • Formux: 这是表单的根组件,它管理所有表单字段的状态和验证。
  • FormuxField: 用于定义表单字段的初始值和验证规则。
  • FormuxValidator: 提供了一些常用的验证规则,如 requiredminLength 等。
  • Formux.of(context): 用于获取当前表单的实例,以便在表单内容组件中访问表单方法和状态。
  • form.setValue(field, value): 用于更新表单字段的值。
  • form.validate(): 用于验证表单字段,如果所有字段都有效则返回 true
  • form.submit(): 提交表单,并触发 onSubmit 回调。

5. 自定义验证规则

你可以通过继承 FormuxValidator 来创建自定义的验证规则:

class CustomValidator extends FormuxValidator {
  CustomValidator(String errorMessage) : super(errorMessage);

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

// 使用自定义验证规则
FormuxField(
  validators: [
    CustomValidator('Value must contain "custom"'),
  ],
);

6. 处理表单状态

你可以通过 FormuxonChange 回调来监听表单字段的变化:

Formux(
  onChange: (values) {
    print('Form values changed: $values');
  },
  // ...
);

7. 重置表单

你可以通过 form.reset() 方法来重置表单字段的值:

ElevatedButton(
  onPressed: () {
    form.reset();
  },
  child: Text('Reset'),
);
回到顶部