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
更多关于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. 处理表单提交
在 SmartForm
的 onSubmit
回调中,你可以处理表单提交的数据。values
参数是一个 Map<String, dynamic>
,包含了表单中所有字段的值。
onSubmit: (values) {
print(values);
// 例如:{name: 'John', email: 'john@example.com', gender: 'Male', agree: true}
},