Flutter表单管理插件zk_form_g的使用
Flutter表单管理插件zk_form_g的使用
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
zk_form_g: ^1.2.1
示例
构建表单项
构建表单
完整示例代码
以下是完整的示例代码,展示了如何使用 zk_form_g
插件来创建一个简单的表单。
import 'package:flutter/material.dart';
// 导入必要的库
import './basic/form_page.dart'; // 基本表单页面
import 'application.dart'; // 应用程序配置
import 'dynamic/form_dynamic_page.dart'; // 动态表单页面
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({
Key key,
}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
Application.appContext = context; // 设置应用程序上下文
return Scaffold(
appBar: AppBar(
title: Text("示例"), // 设置应用标题
),
body: ListView( // 使用ListView展示选项
children: [
ListTile(
title: Text("基本使用"), // 基本使用选项
onTap: () {
Navigator.of(context).push( // 导航到基本表单页面
MaterialPageRoute(
builder: (context) => FormPage(),
),
);
},
),
Divider(
height: 0.5,
thickness: 0.5,
),
ListTile(
title: Text("动态表单"), // 动态表单选项
onTap: () {
Navigator.of(context).push( // 导航到动态表单页面
MaterialPageRoute(
builder: (context) => FormDynamicPage(),
),
);
},
),
Divider(
height: 0.5,
thickness: 0.5,
),
],
),
);
}
}
说明
- 导入必要的库:确保你导入了所有必要的库。
- 定义主应用类 (
MyApp
):这是应用的入口点,设置了MaterialApp
并指定首页为HomePage
。 - 定义首页类 (
HomePage
):在HomePage
中,通过ListView
展示两个选项:“基本使用” 和 “动态表单”,点击后会导航到相应的页面。
基本表单页面 (FormPage
)
import 'package:flutter/material.dart';
import 'package:zk_form_g/zk_form_g.dart';
class FormPage extends StatefulWidget {
[@override](/user/override)
_FormPageState createState() => _FormPageState();
}
class _FormPageState extends State<FormPage> {
final _formKey = GlobalKey<FormState>();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('基本表单'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: '姓名'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入姓名';
}
return null;
},
),
SizedBox(height: 16.0),
TextFormField(
decoration: InputDecoration(labelText: '邮箱'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入邮箱';
}
if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value)) {
return '请输入有效的邮箱地址';
}
return null;
},
),
SizedBox(height: 16.0),
ElevatedButton(
onPressed: () {
if (_formKey.currentState.validate()) {
// 表单验证通过,可以提交数据
print('表单提交成功');
}
},
child: Text('提交'),
),
],
),
),
),
);
}
}
动态表单页面 (FormDynamicPage
)
import 'package:flutter/material.dart';
import 'package:zk_form_g/zk_form_g.dart';
class FormDynamicPage extends StatefulWidget {
[@override](/user/override)
_FormDynamicPageState createState() => _FormDynamicPageState();
}
class _FormDynamicPageState extends State<FormDynamicPage> {
final _formKey = GlobalKey<FormState>();
List<FormItem> formItems = [
FormItem(
label: '姓名',
field: TextFormField(
decoration: InputDecoration(labelText: '姓名'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入姓名';
}
return null;
},
),
),
FormItem(
label: '邮箱',
field: TextFormField(
decoration: InputDecoration(labelText: '邮箱'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入邮箱';
}
if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value)) {
return '请输入有效的邮箱地址';
}
return null;
},
),
),
];
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('动态表单'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: formItems.map((item) => item.field).toList(),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
if (_formKey.currentState.validate()) {
// 表单验证通过,可以提交数据
print('表单提交成功');
}
},
child: Icon(Icons.check),
),
);
}
}
class FormItem {
final String label;
final Widget field;
FormItem({required this.label, required this.field});
}
更多关于Flutter表单管理插件zk_form_g的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单管理插件zk_form_g的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
zk_form_g
是一个用于 Flutter 应用的表单管理插件,它可以帮助开发者更高效地管理和验证表单数据。以下是如何使用 zk_form_g
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 zk_form_g
插件的依赖:
dependencies:
flutter:
sdk: flutter
zk_form_g: ^1.0.0 # 请确保使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 zk_form_g
包:
import 'package:zk_form_g/zk_form_g.dart';
3. 创建表单管理类
使用 zk_form_g
创建一个表单管理类。你可以通过继承 FormManager
类来实现:
class MyFormManager extends FormManager {
MyFormManager() {
// 添加表单字段
addField('username', validators: [Validators.required]);
addField('password', validators: [Validators.required, Validators.minLength(6)]);
}
}
4. 在 UI 中使用表单管理类
在你的 Flutter 页面中使用 MyFormManager
来管理表单:
class MyFormPage extends StatefulWidget {
@override
_MyFormPageState createState() => _MyFormPageState();
}
class _MyFormPageState extends State<MyFormPage> {
final MyFormManager formManager = MyFormManager();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My Form'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Username'),
onChanged: (value) {
formManager.setValue('username', value);
},
validator: (value) {
return formManager.getError('username');
},
),
SizedBox(height: 16.0),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
onChanged: (value) {
formManager.setValue('password', value);
},
validator: (value) {
return formManager.getError('password');
},
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
if (formManager.validate()) {
// 表单验证通过,处理表单数据
print(formManager.getValues());
}
},
child: Text('Submit'),
),
],
),
),
);
}
}
5. 表单验证与提交
在上面的代码中,formManager.validate()
方法用于验证表单字段。如果所有字段都通过验证,formManager.getValues()
方法将返回所有表单字段的值。
6. 自定义验证器
你可以自定义验证器来满足特定的验证需求。例如:
addField('email', validators: [
Validators.required,
Validators.email,
(value) {
if (!value.contains('@example.com')) {
return 'Email must be from example.com';
}
return null;
}
]);
7. 表单重置
你可以使用 formManager.reset()
方法来重置表单字段的值和错误状态。
ElevatedButton(
onPressed: () {
formManager.reset();
},
child: Text('Reset'),
);
8. 表单字段监听
你还可以监听表单字段的变化:
formManager.addListener('username', (value) {
print('Username changed: $value');
});