Flutter智能表单构建插件smart_forms的使用

Flutter智能表单构建插件smart_forms的使用

智能表单构建插件smart_forms简介

智能表单构建插件smart_forms旨在提供一种简单的方式来构建和验证表单,并支持特定类型的字段。

示例

正常用法

在正常用法示例中,我们展示了如何使用smart_forms构建一个简单的表单。此示例展示了如何初始化表单模型、字段模型,并将其集成到应用中。

示例代码

import 'package:flutter/material.dart';
import 'package:smart_forms/models/field.model.dart';
import 'package:smart_forms/models/form.model.dart';
import 'package:smart_forms/smart_forms.dart';
import 'package:smart_forms/utils/enums.dart';

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

class MyApp extends StatelessWidget {
  // 这个小部件是您的应用的根节点。
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Smart Forms',
      theme: ThemeData(
        primarySwatch: Colors.black as MaterialColor?,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Smart Forms'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  FormModel? _form;

  // 表单提交后的回调函数
  _formDone(Map<String, dynamic> res) {
    print(res);
  }

  @override
  void initState() {
    // 初始化表单模型
    _form = FormModel(
      submitButton: "Submit",
      resetButton: "Restart",
      name: "Test",
      fields: [
        FieldModel(
          label: "Field 1",
          type: Types.number,
          validate: true,
        ),
        FieldModel(
          label: "Field 2",
          type: Types.text,
          validate: true,
        )
      ],
    );
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      body: Center(
        child: SmartForms(
          form: _form,
          callback: _formDone,
        ),
      ),
    );
  }
}

按钮外置

按钮外置示例展示了如何将提交和重置按钮放置在表单之外。

示例代码

import 'package:flutter/material.dart';
import 'package:smart_forms/models/field.model.dart';
import 'package:smart_forms/models/form.model.dart';
import 'package:smart_forms/smart_forms.dart';
import 'package:smart_forms/utils/enums.dart';

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

class MyApp extends StatelessWidget {
  // 这个小部件是您的应用的根节点。
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Smart Forms',
      theme: ThemeData(
        primarySwatch: Colors.black as MaterialColor?,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Smart Forms'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  FormModel? _form;
  bool _showForm = false;

  _formDone(Map<String, dynamic> res) {
    print(res);
  }

  @override
  void initState() {
    // 初始化表单模型
    _form = FormModel(
      submitButton: "Submit",
      resetButton: "Restart",
      name: "Test",
      fields: [
        FieldModel(
          label: "Field 1",
          type: Types.number,
          validate: true,
        ),
        FieldModel(
          label: "Field 2",
          type: Types.text,
          validate: true,
        )
      ],
    );
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _showForm = !_showForm;
                });
              },
              child: Text(_showForm ? "Hide Form" : "Show Form"),
            ),
            if (_showForm)
              SmartForms(
                form: _form,
                callback: _formDone,
              ),
          ],
        ),
      ),
    );
  }
}

功能特性

字段类型

smart_forms 提供了多种字段类型,这些类型可以通过一个枚举来指定:

  • 文本(Text)
  • 多行文本(Multiline)
  • 数字(Number)
  • 电话(Phone)
  • 邮件(E-Mail)
  • URL
  • 下拉菜单(Dropdown)
  • 日期选择器(DatePicker)

输入动作

您可以为每个字段设置键盘上的“回车”键触发的动作。目前支持以下三种动作:

  • 下一个(Next)
  • 完成(Done)
  • 自动(Auto):如果这是最后一个字段,则自动完成;否则,下一个字段。

按钮

smart_forms 可以添加两个按钮,只需提供标签即可渲染:

  • 提交按钮(Submit Button)
  • 重置按钮(Reset Button)

此外,您还可以使用自定义按钮,并访问表单的状态,包括验证表单、重置表单和将响应转换为映射的方法。

如何工作

要使用 smart_forms,您需要生成两种实体:

字段模型

字段模型包含表单字段的所有参数和设置。这些参数包括:

  • label: 字符串(必填)
  • type: 使用 Types 枚举
  • errorMessage: 字符串
  • mandatory: 布尔值
  • actions: 使用 Actions 枚举
  • hint: 字符串
  • validate: 布尔值
  • maxLength: 整数
  • password: 布尔值
  • readOnly: 布尔值
  • maxLength: 整数
  • maxLengthMessage: 字符串
  • minLength: 整数
  • minLengthMessage: 字符串
  • options: List<FieldOptionsmodel>
  • dateTimeFormat: 字符串 - Intl 格式

表单模型

表单模型是插件的基础,只包含少量变量:

  • key: GlobalKey<SmartFormState>
  • name: 字符串(必填)
  • submitButton: 字符串
  • resetButton: 字符串
  • callback
  • fields: FieldModel 实体列表(必填)

返回语句

在表单提交时,您会收到类似以下的返回结果:

{
    "form": "<提交的表单名称>",
    "values": {
        "<字段标签>": "<获得的值>"
    }
}

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

1 回复

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


smart_forms 是一个用于 Flutter 的智能表单构建插件,它可以帮助开发者快速构建复杂的表单,并提供了许多内置的验证和样式功能。以下是如何使用 smart_forms 插件的基本步骤:

1. 添加依赖

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

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

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

2. 导入包

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

import 'package:smart_forms/smart_forms.dart';

3. 创建表单

使用 SmartForm 组件来创建一个表单。你可以在这个表单中添加各种输入字段,如 SmartTextField, SmartDropdown, SmartCheckbox 等。

class MyForm extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Smart Form Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: SmartForm(
          onSubmit: (values) {
            // 处理表单提交
            print(values);
          },
          children: [
            SmartTextField(
              label: 'Name',
              name: 'name',
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Please enter your name';
                }
                return null;
              },
            ),
            SmartTextField(
              label: 'Email',
              name: 'email',
              validator: (value) {
                if (value == null || !value.contains('@')) {
                  return 'Please enter a valid email';
                }
                return null;
              },
            ),
            SmartDropdown(
              label: 'Gender',
              name: 'gender',
              items: ['Male', 'Female', 'Other'],
              validator: (value) {
                if (value == null) {
                  return 'Please select your gender';
                }
                return null;
              },
            ),
            SmartCheckbox(
              label: 'Agree to Terms',
              name: 'agree',
              validator: (value) {
                if (value != true) {
                  return 'You must agree to the terms';
                }
                return null;
              },
            ),
            ElevatedButton(
              onPressed: () {
                // 提交表单
                SmartForm.of(context)?.submit();
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 处理表单提交

SmartFormonSubmit 回调中,你可以处理表单提交的数据。values 参数是一个 Map<String, dynamic>,包含了表单中所有字段的值。

onSubmit: (values) {
  print(values);
  // 例如:{name: 'John', email: 'john@example.com', gender: 'Male', agree: true}
},
回到顶部