Flutter表单构建插件bixat_form的使用

Flutter表单构建插件bixat_form的使用

BixatForm 是一个为 Flutter 应用程序设计的插件,旨在简化表单创建和管理。它提供了强大的、灵活的解决方案,用于构建具有内置验证和状态管理的响应式表单。

特性

  • 响应式表单:基于用户输入和验证状态自动更新表单。
  • 内置验证:为每个表单项实现自定义验证逻辑。
  • 状态管理:轻松管理表单状态转换(启用、加载、禁用、完成)。
  • 灵活的数据检索:通过统一的 API 获取表单数据。
  • 可选字段:支持不影响整体表单有效性的可选字段。
  • 排除字段:能够将某些字段排除在最终数据之外。

安装

在您的 Flutter 项目中添加 BixatForm:

dependencies:
  bixat_form: ^<最新版本>

使用

以下是一个基本的使用示例:

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

// 创建一个带有 BixatForm 的类
class MyForm with BixatForm {
  // 定义用户名字段
  TextEditingController get usernameField =>
      put('username', TextEditingController());

  // 定义密码字段
  TextEditingController get passwordField =>
      put('password', TextEditingController());

  // 可选字段列表
  @override
  List<String> get optionalFields => ['terms_accepted'];

  // 自定义验证逻辑
  @override
  bool onValidate(dynamic e) {
    if (e == null) return false;
    final bool result = switch (e.runtimeType) {
      TextEditingController => e.text.isNotEmpty,
      _ => true,
    };
    return result;
  }
}

// 表单 UI 构建
class LoginFormUI extends StatelessWidget {
  final bixatForm = BixatController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('登录表单')),
      body: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          children: [
            // 用户名输入框
            TextFormField(
              controller: bixatForm.usernameField,
              decoration: InputDecoration(labelText: '用户名'),
              onChanged: bixatForm.onChanged,
            ),
            SizedBox(height: 16),
            // 密码输入框
            TextFormField(
              controller: bixatForm.passwordField,
              obscureText: true,
              decoration: InputDecoration(labelText: '密码'),
              onChanged: bixatForm.onChanged,
            ),
            SizedBox(height: 16),
            // 提交按钮
            ValueListenableBuilder(
              valueListenable: bixatForm.state,
              builder: (context, _, __) {
                return ElevatedButton(
                  onPressed: bixatForm.disabled ? null : bixatForm.submit,
                  child: Text(bixatForm.state.value == BixatFormState.loading
                      ? '加载中...'
                      : '登录'),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

自定义

可选字段

定义不会影响整体表单有效性的可选字段:

class MyForm with BixatForm {
  @override
  List<String> get optionalFields => ['terms_accepted'];
}

验证逻辑

为每个字段实现自定义验证逻辑:

@override
bool onValidate(dynamic e) {
  if (e == null) return false;
  final bool result = switch (e.runtimeType) {
    TextEditingController => e.text.isNotEmpty,
    _ => true,
  };
  return result;
}

数据检索

通过统一的 API 获取表单数据:

MapEntry<String, dynamic> getData(String key, value) {
  final result = switch (value.runtimeType) {
    TextEditingController => value.text,
    _ => value,
  };
  return MapEntry(key, result);
}

状态管理

BixatForm 管理三种状态:

  1. 启用:表单有效且可以提交。
  2. 加载:表单正在提交数据。
  3. 禁用:表单无效或被禁用。
  4. 完成:提交成功。

可以通过以下方式访问当前状态:

final currentState = bixatForm.state.value;

提交功能

示例代码展示如何处理表单提交:

Future<void> submit() async {
  state.value = BixatFormState.loading;
  await Future.delayed(const Duration(seconds: 3));
  state.value = BixatFormState.done;
  log(data.toString());
  await Future.delayed(const Duration(seconds: 1));
  state.value = BixatFormState.enabled;
}

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

1 回复

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


bixat_form 是一个用于在 Flutter 中快速构建表单的插件。它通过提供一组预定义的字段类型和验证规则,简化了表单的创建和管理。以下是如何使用 bixat_form 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  bixat_form: ^1.0.0  # 请根据实际版本号进行替换

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

2. 导入包

在你的 Dart 文件中导入 bixat_form 包:

import 'package:bixat_form/bixat_form.dart';

3. 创建表单

使用 BixatForm 组件来创建表单。你可以定义表单的字段、验证规则和提交处理逻辑。

class MyForm extends StatelessWidget {
  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bixat Form Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: BixatForm(
          formKey: _formKey,
          fields: [
            TextFormField(
              decoration: InputDecoration(labelText: 'Name'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter your name';
                }
                return null;
              },
            ),
            TextFormField(
              decoration: InputDecoration(labelText: 'Email'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter your email';
                }
                if (!RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(value)) {
                  return 'Please enter a valid email';
                }
                return null;
              },
            ),
            // 添加更多字段...
          ],
          onSubmit: () {
            if (_formKey.currentState!.validate()) {
              // 表单验证通过,处理提交逻辑
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Form submitted successfully')),
              );
            }
          },
        ),
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的 Flutter 应用,并查看表单的效果。

5. 自定义表单

bixat_form 支持多种类型的表单字段,如文本输入、下拉选择、日期选择等。你可以根据需求自定义表单字段和验证规则。

例如,添加一个下拉选择字段:

DropdownButtonFormField<String>(
  decoration: InputDecoration(labelText: 'Gender'),
  items: <String>['Male', 'Female', 'Other'].map((String value) {
    return DropdownMenuItem<String>(
      value: value,
      child: Text(value),
    );
  }).toList(),
  validator: (value) {
    if (value == null || value.isEmpty) {
      return 'Please select your gender';
    }
    return null;
  },
),
回到顶部