Flutter表单验证插件jk_validator的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter表单验证插件jk_validator的使用

JK Validator 是一个用于在 Flutter 应用程序中进行数据验证的 Dart 包。它提供了一组实用函数来验证各种类型的数据,如数字、URL、电子邮件地址等。

功能

  • isNum: 验证是否为数字。
  • isImageUrl: 验证是否为有效的图片 URL。
  • isEmpty: 验证是否为空。
  • hasLength: 验证长度是否符合要求。
  • isNull: 验证是否为 null。
  • isNullOrBlank: 验证是否为 null 或空。
  • isBlank: 验证是否为空白。
  • isNumericOnly: 验证是否只包含数字。
  • isAlphabetOnly: 验证是否只包含字母。
  • hasCapitalletter: 验证是否包含大写字母。
  • isBool: 验证是否为布尔值。
  • isVideo: 验证是否为视频文件。
  • isImage: 验证是否为图片文件。
  • isAudio: 验证是否为音频文件。
  • isPPT: 验证是否为 PPT 文件。
  • isWord: 验证是否为 Word 文件。
  • isExcel: 验证是否为 Excel 文件。
  • isAPK: 验证是否为 APK 文件。
  • isPDF: 验证是否为 PDF 文件。
  • isTxt: 验证是否为文本文件。
  • isChm: 验证是否为 CHM 文件。
  • isVector: 验证是否为向量文件。
  • isHTML: 验证是否为 HTML 文件。
  • isUsername: 验证是否为有效用户名。
  • isURL: 验证是否为有效 URL。
  • isEmail: 验证是否为有效电子邮件地址。
  • isPhoneNumber: 验证是否为有效电话号码。
  • isDateTime: 验证是否为有效日期时间格式。
  • isMD5: 验证是否为有效的 MD5 哈希。
  • isSHA1: 验证是否为有效的 SHA1 哈希。
  • isSHA256: 验证是否为有效的 SHA256 哈希。
  • isSSN: 验证是否为有效的社会保障号。
  • isBinary: 验证是否为二进制字符串。
  • isIPv4: 验证是否为有效的 IPv4 地址。
  • isIPv6: 验证是否为有效的 IPv6 地址。
  • isHexadecimal: 验证是否为有效的十六进制字符串。
  • isPalindrom: 验证是否为回文。
  • isOneAKind: 验证是否为唯一字符。
  • isPassport: 验证是否为有效的护照号。
  • isCurrency: 验证是否为有效的货币格式。
  • isLengthGreaterThan: 验证长度是否大于指定值。
  • isLengthGreaterOrEqual: 验证长度是否大于等于指定值。
  • isLengthLessThan: 验证长度是否小于指定值。
  • isLengthLessOrEqual: 验证长度是否小于等于指定值。
  • isLengthEqualTo: 验证长度是否等于指定值。
  • capitalize: 将字符串首字母大写。
  • capitalizeFirst: 将字符串首字母大写。
  • removeAllWhitespace: 移除所有空白字符。
  • isEqual: 比较两个值是否相等。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  jk_validator: ^0.0.1

然后运行 flutter pub get 来获取该包。

使用

在你的 Dart 文件中导入该包:

import 'package:jk_validator/jk_validator.dart';

示例代码

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

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

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

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

  // This widget is the root of your application.
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _emailController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: _emailController,
              decoration: InputDecoration(
                labelText: 'Enter Email',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                if (isEmail(_emailController.text)) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Valid email!')),
                  );
                } else {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Invalid email!')),
                  );
                }
              },
              child: Text('Validate Email'),
            ),
          ],
        ),
      ),
      // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter表单验证插件jk_validator的代码示例。这个插件可以帮助你轻松地在Flutter应用中进行表单验证。

首先,确保你已经在pubspec.yaml文件中添加了jk_validator依赖:

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

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

接下来,是一个简单的示例,展示如何使用jk_validator进行表单验证:

import 'package:flutter/material.dart';
import 'package:jk_validator/jk_validator.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>();
  JKValidator _validator = JKValidator();

  TextEditingController _nameController = TextEditingController();
  TextEditingController _emailController = TextEditingController();
  TextEditingController _passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextFormField(
              controller: _nameController,
              decoration: InputDecoration(labelText: 'Name'),
              validator: (value) {
                return _validator.validate(
                  value,
                  [
                    RequiredValidator(errorText: 'Name is required'),
                    MinLengthValidator(6, errorText: 'Name must be at least 6 characters long'),
                  ],
                );
              },
            ),
            TextFormField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
              validator: (value) {
                return _validator.validate(
                  value,
                  [
                    RequiredValidator(errorText: 'Email is required'),
                    EmailValidator(errorText: 'Invalid email format'),
                  ],
                );
              },
            ),
            TextFormField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
              validator: (value) {
                return _validator.validate(
                  value,
                  [
                    RequiredValidator(errorText: 'Password is required'),
                    MinLengthValidator(8, errorText: 'Password must be at least 8 characters long'),
                  ],
                );
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                if (_formKey.currentState!.validate()) {
                  // If all validators pass, submit the form
                  print('Form submitted');
                  print('Name: ${_nameController.text}');
                  print('Email: ${_emailController.text}');
                  print('Password: ${_passwordController.text}');
                }
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }

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

在这个示例中,我们创建了一个简单的表单,包含三个字段:姓名、电子邮件和密码。每个字段都使用了TextFormField,并且配置了validator属性来调用_validator.validate方法。_validator.validate方法接受一个值和一个验证器列表,如果验证失败,它将返回第一个失败的验证器的errorText

我们还使用了GlobalKey<FormState>来管理整个表单的状态,并在提交按钮的onPressed回调中调用_formKey.currentState!.validate()来验证所有字段。如果所有字段都通过验证,表单将被提交,并在控制台中打印出输入的值。

请确保在实际项目中根据需求调整验证规则和用户界面。

回到顶部