Flutter表单验证插件form_validation_utils的使用

Flutter表单验证插件form_validation_utils的使用

一个轻量级的Flutter包,提供对常用输入(如电子邮件、密码和电话号码)的验证帮助。

功能

  • 电子邮件验证:检查电子邮件是否符合正确的格式。
  • 密码强度验证:根据长度、字符和复杂性验证密码强度。
  • 用户名验证:确保用户名遵循特定规则,例如允许的字符和最小长度。
  • 电话号码验证:验证电话号码,确保它们只包含数字并满足长度要求。

开始使用

要开始使用form_validation_utils,将其添加到你的pubspec.yaml文件中:

dependencies:
  form_validation_utils: ^x.x.x

然后运行flutter pub get以安装依赖。

示例代码

以下是一个简单的登录屏幕示例,展示了如何使用form_validation_utils进行表单验证。

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

class LoginScreen extends StatelessWidget {
  const LoginScreen({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 控制器用于管理文本字段的值
    TextEditingController emailController = TextEditingController();
    TextEditingController passwordController = TextEditingController();

    // 表单键,用于验证整个表单
    final _formKey = GlobalKey<FormState>();

    return Scaffold(
      body: Center(
        child: Form(
          key: _formKey, // 将表单键绑定到表单
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Text(
                '登录',
                style: TextStyle(
                  fontSize: 36,
                  fontWeight: FontWeight.bold,
                  color: Colors.red,
                ),
              ),
              const SizedBox(height: 20),
              // 邮箱输入框
              SizedBox(
                width: 300,
                child: TextFormField(
                  controller: emailController,
                  validator: FormValidators.validateEmail, // 验证邮箱输入
                  decoration: InputDecoration(
                    hintText: '邮箱',
                    filled: true,
                    fillColor: Colors.white,
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                  ),
                ),
              ),
              const SizedBox(height: 10),
              // 密码输入框
              SizedBox(
                width: 300,
                child: TextFormField(
                  controller: passwordController,
                  validator: FormValidators.validatePassword, // 验证密码输入
                  decoration: InputDecoration(
                    hintText: '密码',
                    filled: true,
                    fillColor: Colors.white,
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                  ),
                ),
              ),
              const SizedBox(height: 20),
              // 登录按钮
              ElevatedButton(
                onPressed: () {
                  // 验证表单
                  if (_formKey.currentState!.validate()) {
                    print("表单有效");
                  }
                },
                style: ElevatedButton.styleFrom(
                  backgroundColor: Colors.redAccent,
                  minimumSize: const Size(200, 50),
                ),
                child: const Text(
                  '登录',
                  style: TextStyle(
                    fontWeight: FontWeight.bold,
                    color: Colors.white,
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter表单验证插件form_validation_utils的代码示例。这个插件可以帮助你更方便地进行表单验证。

首先,你需要在你的pubspec.yaml文件中添加form_validation_utils依赖:

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

然后运行flutter pub get来安装依赖。

接下来是一个完整的示例代码,展示了如何使用form_validation_utils进行表单验证:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Form Validation Example'),
        ),
        body: MyForm(),
      ),
    );
  }
}

class MyForm extends StatefulWidget {
  @override
  _MyFormState createState() => _MyFormState();
}

class _MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();
  late TextEditingController _nameController;
  late TextEditingController _emailController;
  late TextEditingController _passwordController;

  @override
  void initState() {
    super.initState();
    _nameController = TextEditingController();
    _emailController = TextEditingController();
    _passwordController = TextEditingController();
  }

  @override
  void dispose() {
    _nameController.dispose();
    _emailController.dispose();
    _passwordController.dispose();
    super.dispose();
  }

  void _validateAndSubmit() async {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();

      // 使用form_validation_utils进行额外的验证
      final validationUtils = FormValidationUtils();
      final nameValidationResult = validationUtils.validateName(_nameController.text);
      final emailValidationResult = validationUtils.validateEmail(_emailController.text);
      final passwordValidationResult = validationUtils.validatePassword(
        _passwordController.text,
        minLength: 6,
      );

      if (nameValidationResult.isValid &&
          emailValidationResult.isValid &&
          passwordValidationResult.isValid) {
        // 表单验证通过,执行提交操作
        print('Form Submitted');
        // TODO: 添加提交逻辑,例如发送到服务器
      } else {
        // 显示错误信息
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Please fix the errors in the form.'),
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: _formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextFormField(
              controller: _nameController,
              decoration: InputDecoration(labelText: 'Name'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Name is required';
                }
                return null;
              },
            ),
            TextFormField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Email is required';
                }
                // 这里使用正则表达式验证,但可以通过form_validation_utils来简化
                // if (!RegExp("^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$").hasMatch(value)) {
                //   return 'Invalid email address';
                // }
                return null;
              },
            ),
            TextFormField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Password is required';
                }
                return null;
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _validateAndSubmit,
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter表单,包含姓名、电子邮件和密码字段。在提交表单时,我们首先使用Flutter内置的表单验证功能(通过validator属性),然后使用form_validation_utils插件进行额外的验证。

请注意,由于form_validation_utils插件的具体API可能会有所不同,因此你需要参考其官方文档以确保使用正确的验证方法和参数。上面的代码示例假设FormValidationUtils类提供了validateNamevalidateEmailvalidatePassword方法,但你需要根据实际的插件API进行调整。

希望这个示例对你有所帮助!

回到顶部