Flutter表单验证插件x_validators的使用

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

Flutter表单验证插件x_validators的使用

标题

☕ X Validators

内容

简单形式验证插件,适用于Flutter表单组件。

  • 零依赖
  • 可扩展
  • 经过充分测试
  • 开源

安装

pubspec.yaml文件中添加以下内容:

dependencies:
  x_validators: ^1.0.7

别忘了运行flutter pub get

API概述

以下是x_validators提供的各种验证规则:

规则 描述
IsRequired() 确保输入(去空格后)不为空。
Contains() 验证输入字符串是否包含指定值。
EndsWith() 确保输入字符串以特定值结尾。
IsEmpty() 确保输入(去空格后)为空。
Match() 验证输入是否与指定字符串匹配。
MaxLength() 确保输入长度小于或等于指定的最大长度。
MinLength() 确保输入长度大于或等于指定的最小长度。
NotContains() 验证输入字符串是否不包含指定值。
StartsWith() 确保输入字符串以特定模式开头。

数字验证规则

规则 描述
IsArabicNum() 验证输入是否为有效的阿拉伯整数。
IsHindiNum() 验证输入是否为有效的印地语整数。
IsNumber() 验证输入是否为有效的整数。
MaxValue() 验证数值是否小于或等于指定的最大值。
MinValue() 验证数值是否大于或等于指定的最小值。

URL验证规则

规则 描述
IsFacebookUrl() 验证输入是否为有效的Facebook URL。
IsInstagramUrl() 验证输入是否为有效的Instagram URL。
IsSecureUrl() 验证输入是否为安全URL(以https://开头)。
IsUrl() 验证输入是否为有效的URL。
IsYoutubeUrl() 验证输入是否为有效的YouTube URL。

电话验证规则

规则 描述
IsEgyptianPhone() 验证输入是否为有效的埃及电话号码。
ISKsaPhone() 验证输入是否为有效的沙特阿拉伯电话号码。

其他验证规则

规则 描述
IsEmail() 验证输入是否为有效的电子邮件地址。
IsBool() 验证输入是否为有效的布尔值。
IsIpAddress() 验证输入是否为有效的IP地址。
IsPort() 验证输入是否为有效的端口号。
RegExpRule() 允许使用正则表达式作为验证规则。

列表验证规则

规则 描述
ContainsAny() 检查输入是否包含提供的列表中的任意字符串。
IsIn() 检查输入是否在提供的列表中。
IsNotIn() 检查输入是否不在提供的列表中。
NotContainsAny() 检查输入是否不包含提供的列表中的任何项。

魔法验证规则

规则 描述
IsOptional() 允许跳过错误如果输入为null。

颜色验证规则

规则 描述
IsHexColor() 检查输入是否为有效的十六进制颜色。

日期验证规则

规则 描述
IsDateAfter() 检查日期是否在指定日期之后。
IsDate() 检查输入是否为有效的日期格式。
IsDateMillis() 检查输入是否为有效的时间戳(自epoch以来的毫秒)。

语言验证规则

规则 描述
IsArabicChars() 检查输入是否由阿拉伯字符组成。
IsEnglishChars() 检查输入是否由英文字符组成。
IsLtrLanguage() 检查语言代码是否代表一个左对齐的语言。
IsArabicChars() 检查输入是否由阿拉伯字符组成。
IsNumbersOnly() 检查输入是否仅由数字组成。
IsRTLLanguage() 检查语言代码是否代表一个右对齐的语言。

使用示例

基本使用

TextFormField(
  decoration: const InputDecoration(labelText: 'IsRequired'),
  validator: xValidator([
    IsRequired(),
  ]),
),

更复杂的验证

TextFormField(
  decoration: const InputDecoration(labelText: 'IsRequired'),
  validator: xValidator([
    // 确保输入不为空,并带有自定义错误消息。
    IsRequired("Field cannot be empty"),

    // 确保输入至少有3个字符。
    MinLength(3, "Field must be at least 3 characters"),

    // 确保输入不超过20个字符。
    MaxLength(20, "Field cannot exceed 20 characters"),
  ], onFailureCallBack: (String? input, List<TextXValidationRule> rules, TextXValidationRule failedRule) {
    // 记录失败验证的信息用于进一步分析。
    log("###### Validation failed for input #### : $input");
    log("#### Failed rule #### : $failedRule");
  }),
),

解释 第一个示例演示了基本的IsRequired验证规则,确保输入不为空。 第二个示例使用多个规则(IsRequired, MinLength, MaxLength)进行更复杂的验证。它还包括了一个onFailureCallBack来处理验证失败的情况,记录输入和失败的规则供进一步分析。

许可证

请参阅LICENSE

作者

👨🏻‍💻 Eng-MahmoudBasuony

示例代码


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用x_validators插件进行表单验证的代码示例。x_validators是一个流行的Flutter插件,用于简化表单验证过程。

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

dependencies:
  flutter:
    sdk: flutter
  x_validators: ^latest_version  # 请替换为最新版本号

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

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

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();
  final FormKey _formKey = GlobalKey<FormState>();

  // 验证结果
  String? _emailError;
  String? _passwordError;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Form Validation Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                controller: _emailController,
                decoration: InputDecoration(labelText: 'Email'),
                validator: (value) {
                  _emailError = validateEmail(value);
                  return _emailError;
                },
              ),
              TextFormField(
                controller: _passwordController,
                decoration: InputDecoration(labelText: 'Password'),
                obscureText: true,
                validator: (value) {
                  _passwordError = validatePassword(value);
                  return _passwordError;
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // 表单验证通过后的处理逻辑
                    print('Form submitted successfully');
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // 验证邮箱格式
  String? validateEmail(String? value) {
    return EmailValidator().validate(value) == null
        ? 'Please enter a valid email address'
        : null;
  }

  // 验证密码长度
  String? validatePassword(String? value) {
    return value?.length ?? 0 < 6
        ? 'Password must be at least 6 characters long'
        : null;
  }

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

在这个示例中,我们创建了一个简单的表单,包含两个字段:一个用于输入电子邮件地址,另一个用于输入密码。我们使用了x_validators插件中的EmailValidator来验证电子邮件格式,并自定义了一个简单的密码长度验证方法。

表单的验证逻辑是在点击提交按钮时触发的,通过调用_formKey.currentState!.validate()来检查所有字段的验证结果。如果验证通过,validate()方法会返回true,然后你可以执行表单提交后的逻辑(例如,将数据发送到服务器)。

请注意,这个示例中的validatePassword方法只是一个简单的示例,你可以根据需要添加更多的验证规则,比如要求密码包含特殊字符、数字等。

回到顶部