Flutter表单构建插件simple_form_builder的使用
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
更多关于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'),
),
],
),
),
),
);
}
}
在这个示例中:
- 我们创建了一个
FormBuilder
,它包含多个表单字段,包括FormBuilderTextField
、FormBuilderDropdown
、FormBuilderCheckboxList
和FormBuilderDateTimePicker
。 - 每个表单字段都有一个
name
属性,用于标识字段,以及一个decoration
属性,用于设置标签文本。 - 我们为一些字段添加了验证器,比如
FormBuilderValidators.required(context)
,以确保用户填写了必填字段。 - 使用
ElevatedButton
提交表单,并在按钮的onPressed
方法中调用_fbKey.currentState?.save()
和_fbKey.currentState!.validate()
来保存和验证表单数据。
这个示例展示了如何使用 simple_form_builder
插件快速构建和管理复杂的表单。你可以根据需要添加更多的字段和验证器,以适应你的具体需求。