Flutter动态表单构建插件ems_form_dynamic的使用

Flutter 动态表单构建插件 ems_form_dynamic 的使用

CustomerFormWidget 是一个 Flutter 通用小部件,允许构建动态表单并灵活地处理数据模型。本文档解释如何配置和使用该小部件。

特性

  • 基于字段列表创建动态表单。
  • 验证输入字段。
  • 使用 fromMap 函数反序列化通用模型。
  • 当数据保存时通知外部组件。
  • 在选择时显示内容的 toString() 方法。

安装

  1. 将小部件文件和相关模型添加到你的 Flutter 项目中。
  2. 确保在 pubspec.yaml 文件中配置了 flutter 依赖项。

模型要求

使用 CustomerFormWidget 的通用模型必须实现两个方法:

  • fromMap: 从 Map<String, dynamic> 创建模型实例。

示例模型

class CustomerLogin {
  String? email;
  String? createAt;
  TipoModelo? tipoModelo;

  CustomerLogin({
    this.email,
    this.createAt,
    this.tipoModelo,
  });

  factory CustomerLogin.fromMap(Map<String, dynamic> map) {
    return CustomerLogin(
      email: map['email'] as String?,
      createAt: map['createAt'] as String?,
      tipoModelo: map['tipoModelo'] == null
              ? null
              : TipoModelo.fromMap(map['tipoModelo']),
    );
  }

  [@override](/user/override)
  String toString() {
    return 'CustomerLogin{email: $email, createAt: $createAt, tipoModelo: $tipoModelo }';
  }
}

class TipoModelo {
  String nombre;
  int id;

  TipoModelo({
    required this.nombre,
    required this.id,
  });

  factory TipoModelo.fromMap(Map<String, dynamic> map) {
    return TipoModelo(nombre: map['nombre'], id: map['id']);
  }

  [@override](/user/override)
  String toString() {
    return nombre;
  }
}

使用小部件

完整示例

import 'package:flutter/material.dart';

import 'models/form_field_model.dart';
import 'models/validation_type_enum.dart';
import 'widgets/CustomerFormWidget.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Customer Form Widget')),
        body: CustomerFormExample(),
      ),
    );
  }
}

class CustomerFormExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return CustomerFormWidget(
      key: formWidgetKey,
      padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 30),
      formFieldList: formFieldList,
      model: CustomerLogin(),
      fromMap: CustomerLogin.fromMap,
      buttonSave: ElevatedButton(
        onPressed: () {
          try {
            final updatedModel = formWidgetKey.currentState!.saveForm();
            debugPrint('Form model is :: ${updatedModel.toString()}');
            formWidgetKey.currentState!.clearForm();
          } catch (e) {
            debugPrint('Error Form model is :: ${e.toString()} ');
          }
        },
        child: const Text('Login in'),
      ),
    );
  }
}

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

1 回复

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


ems_form_dynamic 是一个用于在 Flutter 中动态构建表单的插件。它允许你通过 JSON 配置来生成复杂的表单,并且可以轻松地处理表单的验证、提交等操作。以下是如何使用 ems_form_dynamic 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  ems_form_dynamic: ^latest_version

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

2. 导入包

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

import 'package:ems_form_dynamic/ems_form_dynamic.dart';

3. 定义表单配置

ems_form_dynamic 使用 JSON 配置来定义表单。你可以通过以下方式定义表单字段:

final formConfig = [
  {
    "type": "text",
    "label": "Username",
    "key": "username",
    "required": true,
    "placeholder": "Enter your username",
  },
  {
    "type": "password",
    "label": "Password",
    "key": "password",
    "required": true,
    "placeholder": "Enter your password",
  },
  {
    "type": "email",
    "label": "Email",
    "key": "email",
    "required": true,
    "placeholder": "Enter your email",
  },
  {
    "type": "date",
    "label": "Birthdate",
    "key": "birthdate",
    "required": false,
  },
  {
    "type": "dropdown",
    "label": "Gender",
    "key": "gender",
    "options": ["Male", "Female", "Other"],
    "required": true,
  },
];

4. 创建动态表单

使用 DynamicForm 组件来创建动态表单,并传入表单配置:

class MyFormPage extends StatelessWidget {
  final List<Map<String, dynamic>> formConfig;

  MyFormPage({required this.formConfig});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dynamic Form'),
      ),
      body: DynamicForm(
        formConfig: formConfig,
        onSubmit: (Map<String, dynamic> formData) {
          // 处理表单提交
          print(formData);
        },
      ),
    );
  }
}

5. 处理表单提交

DynamicForm 组件中,你可以通过 onSubmit 回调来处理表单的提交事件。formData 是一个包含所有表单字段键值对的 Map。

DynamicForm(
  formConfig: formConfig,
  onSubmit: (Map<String, dynamic> formData) {
    // 处理表单提交
    print(formData);
    // 你可以在这里将数据发送到服务器或进行其他操作
  },
),

6. 自定义表单字段

ems_form_dynamic 支持多种类型的表单字段,如文本、密码、邮箱、日期、下拉框等。你可以根据需要自定义表单字段的类型和属性。

7. 表单验证

ems_form_dynamic 内置了基本的表单验证功能。你可以通过设置 required 属性来指定字段是否为必填项,并根据需要添加自定义验证规则。

8. 运行应用

最后,运行你的 Flutter 应用,你应该能够看到一个根据 JSON 配置动态生成的表单。

void main() {
  runApp(MaterialApp(
    home: MyFormPage(formConfig: formConfig),
  ));
}
回到顶部