Flutter数据验证插件validify的使用

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

Flutter数据验证插件validify的使用

目录

特性

本仓库中的代码旨在简化您的Flutter项目中的验证过程。它包括:

  • 自定义验证器:轻松创建和组合符合您需求的验证器。
  • 同步和异步验证:支持两种类型的验证,包括远程检查和复杂操作。
  • 内置验证器:包含各种常见的验证器,如必填字段、最小/最大长度、正则表达式匹配等。
  • 灵活的错误信息:为每个验证规则定制错误信息。

安装

要将validify用于您的Dart或Flutter项目,在pubspec.yaml文件中添加以下依赖项:

dependencies:
  validify: ^0.0.3

然后运行flutter pub get以安装该包。

使用

class EmailValidator extends Validify {
  [@override](/user/override)
  List<ValidatorFunction> get validators => [
        Validator.require(message: 'Email is required'),
        Validator.pattern(r'^[^@]+@[^@]+\.[^@]+$', message: 'Invalid email format'),
      ];
}

TextFormField(
  controller: _emailController,
  decoration: const InputDecoration(
    labelText: 'Email',
    border: OutlineInputBorder(),
  ),
  validator: EmailValidator().validate,
),

/// ------------ 或者 ------------

final ValidatorFunction _passwordValidator = Validators.combine([
  Validators.require(message: 'Password is required'),
  Validators.minLength(6, message: (length) => 'Password must be at least $length characters long'),
]);

TextFormField(
  controller: _passwordController,
  obscureText: true,
  decoration: const InputDecoration(
    labelText: 'Password',
    border: OutlineInputBorder(),
  ),
  validator: _passwordValidator,
),

API参考

验证器

一个用于创建和管理验证规则的实用类:

  • require({String? message}): 检查值是否不为空的验证器。
  • minLength(int length, {String? Function(int)? message}): 最小长度验证器。
  • maxLength(int length, {String? Function(int)? message}): 最大长度验证器。
  • pattern(RegExp pattern, {String? message}): 正则表达式模式匹配验证器。
  • combine(List<ValidatorFunction> validators): 组合多个验证器。
  • equality(String firstValue, String secondValue, {required String message}): 检查两个值是否相等。
  • asyncPattern(RegExp pattern, {String? message}): 异步正则表达式模式匹配验证器。
  • custom({required bool Function(String? value) condition, required String message}): 基于条件的自定义验证器。
  • trimAndValidate(ValidatorFunction validator): 去除空格后应用提供的验证器。
  • dateAfter(DateTime date, {String? message}): 检查日期是否在指定日期之后的验证器。
  • combineAsync(List<AsyncValidatorFunction> validators): 组合多个异步验证器。

为什么使用此系统?

  • 可重用:一旦设置好,您可以跨不同项目重复使用这些验证器。
  • 可扩展:轻松扩展和自定义验证器以适应特定用途。
  • 代码清晰:通过抽象验证逻辑来鼓励清晰且可维护的代码。

Dart版本

  sdk: '>=2.17.0 <4.0.0'

问题

请在GitHub页面上提交任何问题、错误报告或功能请求。

贡献

如果您希望为插件做出贡献(例如改进文档、解决错误或添加新功能),请仔细阅读我们的贡献指南,并发送您的拉取请求

作者

这个validify包由Bedirhan Sağlam开发。您可以通过bedirhansaglam270@gmail.com联系我。

许可证

MIT


示例代码

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.light(),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

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

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

  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();

  // 密码验证器使用Validators类
  final ValidatorFunction _passwordValidator = Validators.combine([
    Validators.require(message: 'Password is required'),
    Validators.minLength(
      6,
      message: (length) => 'Password must be at least $length characters long',
    ),
  ]);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('验证器示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: <Widget>[
              TextFormField(
                controller: _emailController,
                keyboardType: TextInputType.emailAddress,
                textInputAction: TextInputAction.next,
                decoration: const InputDecoration(
                  labelText: 'Email',
                  border: OutlineInputBorder(),
                ),
                validator: _EmailValidator().validate,
              ),
              const SizedBox(height: 16.0),
              TextFormField(
                controller: _passwordController,
                obscureText: true,
                decoration: const InputDecoration(
                  labelText: 'Password',
                  border: OutlineInputBorder(),
                ),
                validator: _passwordValidator,
              ),
              const SizedBox(height: 16.0),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState?.validate() ?? false) {
                    ScaffoldMessenger.of(context)
                      ..hideCurrentSnackBar()
                      ..showSnackBar(
                        const SnackBar(content: Text('正在处理数据')),
                      );
                  }
                },
                child: const Text('提交'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

/// 使用这个[_EmailValidator]或者像这样:
///
/// ```dart
///   final ValidatorFunction _emailValidator = Validators.combine([
///    Validators.require(message: 'Email is required'),
///    Validators.pattern(RegExp(r'^[^@]+@[^@]+\.[^@]+$'), message: '无效的电子邮件格式'),
///  ]);
/// ```
class _EmailValidator extends Validify {
  [@override](/user/override)
  List<ValidatorFunction> get validators => [
        Validators.require(message: 'Email is required'),
        Validators.pattern(RegExp(r'^[^@]+@[^@]+\.[^@]+$'),
            message: '无效的电子邮件格式'),
      ];
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用validify插件进行数据验证的代码示例。validify是一个用于Flutter的表单验证库,尽管它不是Flutter社区中最流行的验证库之一(如validatorformz),但它仍然提供了基本的数据验证功能。

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

dependencies:
  flutter:
    sdk: flutter
  validify: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来是一个简单的Flutter应用示例,展示了如何使用validify进行数据验证:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final _formKey = GlobalKey<FormState>();
  String _email = '';
  String _password = '';
  ValidationResult _validationResult;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Validify Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                validator: (value) {
                  if (value.isEmpty) {
                    return 'Email is required';
                  }
                  _validationResult = validateEmail(value);
                  if (_validationResult != ValidationResult.valid) {
                    return 'Invalid email';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _email = value;
                  });
                },
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Password'),
                validator: (value) {
                  if (value.isEmpty || value.length < 6) {
                    return 'Password must be at least 6 characters long';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _password = value;
                  });
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // If all validators pass, submit the form
                    print('Email: $_email');
                    print('Password: $_password');
                    // You can also check the email validation result here if needed
                    if (_validationResult == ValidationResult.valid) {
                      print('Email is valid');
                    } else {
                      print('Email is invalid (should not reach here if validator passed)');
                    }
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // Helper function to validate email using validify
  ValidationResult validateEmail(String email) {
    final emailRegex = RegExp(
        r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"); // Simple email regex
    return emailRegex.hasMatch(email) ? ValidationResult.valid : ValidationResult.invalid;
  }
}

注意:在上面的代码中,validateEmail函数实际上并没有直接使用validify库的特定功能,因为validify库通常用于更复杂的验证场景,并且其API可能与直接使用正则表达式不同。不过,由于validify库的文档和示例可能有限,这里我展示了一个基于正则表达式的简单验证方法。

如果你确实想使用validify库提供的功能,你可能需要查看其官方文档或源代码以了解如何正确集成和使用它。如果validify库提供了特定的验证器类,你可能需要实例化这些类并使用它们来执行验证,而不是像上面那样直接使用正则表达式。

由于validify库的具体用法可能会随着版本的更新而变化,因此建议查阅最新的官方文档以获取最准确的信息。如果validify库不再维护或功能有限,你也可以考虑使用其他更流行的验证库,如validatorformz

回到顶部