Flutter表单构建插件simple_form_builder的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter表单构建插件simple_form_builder的使用

简介

simple_form_builder 是一个用于Flutter应用的表单构建插件,允许开发者通过JSON文件快速创建包含多种字段类型的完整表单。支持的字段类型包括文本、复选框、多选、日期时间、日期、时间和文件上传等。该插件100%用Dart编写,适用于Android、iOS和Web平台。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  simple_form_builder: ^0.0.18

简单用法

JSON Schema

simple_form_builder 使用JSON格式来定义表单结构。以下是一个简单的JSON示例:

{
  "status": 1,
  "data": [
    {
      "questions": [
        {
          "question_id": "speed_question",
          "fields": ["above 40km/h", "below 40km/h", "0km/h"],
          "_id": "60dc6a3dc9fe14577c30d271",
          "title": "请提供车辆的速度?",
          "description": "请选择下面的一个选项",
          "remark": true,
          "type": "multiple",
          "is_mandatory": true
        }
      ]
    }
  ]
}

Widget 实现

接下来,你需要在Flutter应用中使用 FormBuilder 小部件,并传递上述JSON数据。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:simple_form_builder/formbuilder.dart';
import 'package:simple_form_builder/global/constant.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FormBuilder Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Material App Bar'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              FormBuilder(
                initialData: sampleData, // 从global/constant.dart中导入的样本数据
                index: 0, // 指定要显示的表单索引
                showIndex: true, // 是否显示问题编号
                onSubmit: (val) {
                  print(val); // 提交时打印表单数据
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

自定义用法

simple_form_builder 提供了多个属性,以便更灵活地控制表单的外观和行为。以下是常用属性及其说明:

属性 描述
initialData 生成表单所需的JSON数据映射,参考 constant.dart 中的样本格式
index 如果数据包含多个表单,传递表单的索引以显示特定表单的问题
onSubmit 提交按钮按下时调用的函数,接收表单数据
showPrefix 启用或禁用问题前缀图标
onUpload 包含用户上传的文件字符串
showIndex 是否显示问题编号

完整示例代码

以下是一个更完整的示例,展示了如何自定义表单的标题、描述、按钮样式等:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:simple_form_builder/formbuilder.dart';
import 'package:simple_form_builder/global/checklistModel.dart';
import 'package:simple_form_builder/global/constant.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FormBuilder Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Material App Bar'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              FormBuilder(
                initialData: sampleData, // 从global/constant.dart中导入的样本数据
                title: "表单标题", // 表单标题
                titleStyle: TextStyle(
                  fontWeight: FontWeight.bold,
                  fontSize: 30,
                ),
                description: "表单描述", // 表单描述
                widgetCrossAxisAlignment: CrossAxisAlignment.center, // 子组件对齐方式
                index: 0, // 指定要显示的表单索引
                showIndex: false, // 是否显示问题编号
                descriptionTextDecoration: TextStyle(color: Colors.red), // 描述文本样式
                submitButtonWidth: 1, // 提交按钮宽度
                submitButtonDecoration: BoxDecoration(
                  color: Colors.blue, // 提交按钮背景颜色
                ),
                showIcon: false, // 是否显示图标
                onSubmit: (ChecklistModel val) {
                  if (val == null) {
                    print("无数据");
                  } else {
                    var json = jsonEncode(val.toJson()); // 将表单数据转换为JSON字符串
                    print(json); // 打印表单数据
                  }
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 simple_form_builder 插件在 Flutter 中构建表单的代码示例。这个插件使得创建和管理表单变得相对简单和直观。

首先,确保你已经在 pubspec.yaml 文件中添加了 simple_form_builder 依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_form_builder: ^x.y.z  # 请替换为最新版本号

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

接下来,是一个完整的 Flutter 应用示例,展示了如何使用 simple_form_builder 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple Form Builder Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyFormPage(),
    );
  }
}

class MyFormPage extends StatefulWidget {
  @override
  _MyFormPageState createState() => _MyFormPageState();
}

class _MyFormPageState extends State<MyFormPage> {
  final GlobalKey<FormBuilderState> _fbKey = GlobalKey<FormBuilderState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Simple Form Builder Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: FormBuilder(
          key: _fbKey,
          child: Column(
            children: <Widget>[
              FormBuilderTextField(
                name: 'name',
                decoration: InputDecoration(labelText: 'Name'),
                validators: [
                  FormBuilderValidators.required(context),
                ],
              ),
              FormBuilderDropdown(
                name: 'gender',
                decoration: InputDecoration(labelText: 'Gender'),
                options: ['Male', 'Female', 'Other']
                    .map<DropdownMenuItem<String>>((String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Text(value),
                  );
                }).toList(),
                validators: [
                  FormBuilderValidators.required(context),
                ],
              ),
              FormBuilderCheckboxList(
                name: 'hobbies',
                decoration: InputDecoration(labelText: 'Hobbies'),
                options: ['Reading', 'Swimming', 'Traveling']
                    .map<CheckboxListTile<String>>((String value) {
                  return CheckboxListTile<String>(
                    title: Text(value),
                    value: value,
                  );
                }).toList(),
              ),
              FormBuilderDateTimePicker(
                name: 'dob',
                decoration: InputDecoration(labelText: 'Date of Birth'),
                type: FormBuilderDateTimePickerType.date,
                validators: [
                  FormBuilderValidators.required(context),
                ],
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  _fbKey.currentState?.save();
                  if (_fbKey.currentState!.validate()) {
                    // 提交表单数据
                    final formData = _fbKey.currentState!.value;
                    print(formData);
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个 FormBuilder,它包含多个表单字段,包括 FormBuilderTextFieldFormBuilderDropdownFormBuilderCheckboxListFormBuilderDateTimePicker
  2. 每个表单字段都有一个 name 属性,用于标识字段,以及一个 decoration 属性,用于设置标签文本。
  3. 我们为一些字段添加了验证器,比如 FormBuilderValidators.required(context),以确保用户填写了必填字段。
  4. 使用 ElevatedButton 提交表单,并在按钮的 onPressed 方法中调用 _fbKey.currentState?.save()_fbKey.currentState!.validate() 来保存和验证表单数据。

这个示例展示了如何使用 simple_form_builder 插件快速构建和管理复杂的表单。你可以根据需要添加更多的字段和验证器,以适应你的具体需求。

回到顶部