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,
          ),
        ],
      ),
    );
  }
}

说明

  1. 导入必要的库:确保你导入了所有必要的库。
  2. 定义主应用类 (MyApp):这是应用的入口点,设置了 MaterialApp 并指定首页为 HomePage
  3. 定义首页类 (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

1 回复

更多关于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');
});
回到顶部