Flutter验证插件validasi的功能使用

Flutter验证插件validasi的功能使用

image

一个灵活且简单的Dart验证库。

文档 API文档

安装

在你的 pubspec.yaml 文件中添加 validasi,然后运行 pub get

dependencies:
  validasi: ^最新版本号

快速使用

要使用该库,只需导入包并使用 Validasi 类来访问可用的验证器。

import 'package:validasi/validasi.dart';

void main(List<String> args) {
  var schema = Validasi.string().maxLength(255);

  var result = schema.parse(args.firstOrNull);

  print("Hello! ${result.value}");
}

支持的验证类型

  • 字符串
  • 数值
  • 日期
  • 列表
  • 映射
  • 泛型

特性

  • 类型转换处理
    使用 Transformer 可以处理类型转换。Validasi 接受 dynamic 输入,并允许你传递任何类型的数据。它将自动将数据转换为所需的类型。

  • 安全验证
    使用 tryParsetryParseAsync 方法可以验证输入数据。它将返回一个包含验证结果的 Result 对象,而不会抛出与规则失败相关的任何异常。

  • 自定义规则
    可以通过 customcustomFor 方法创建自己的自定义规则。

  • 助手类
    Validasi 还提供了一些助手类,帮助你组织和捕获验证结果,以便传递给 Flutter 的 FormField

许可证

Validasi 库是根据 MIT 许可证 发布的。

贡献

你可以使用以下脚本来启动开发环境:

# 克隆仓库
git clone https://github.com/albetnov/validasi
# 安装依赖
dart pub get

测试文件位于 test/ 目录下,它们与 libsrc 目录中的结构相似。

文档位于 docs/ 目录下,你需要安装 Deno 2.0 来本地运行文档。可以使用以下命令:

deno i
deno run docs:dev

或者,你可以使用包管理器执行 vitepress 命令:

npx vitepress dev doc
bunx vitepress dev doc
pnpm dlx vitepress dev doc

完整示例

以下是一个完整的示例,展示了如何使用 validasi 插件进行验证。

import 'package:validasi/validasi.dart';

void main() {
  // 简单的单个验证
  var idSchema = Validasi.number();

  try {
    idSchema.parse(null); // 将抛出 FieldError 异常:字段不能为空
  } catch (e) {
    print(e);
  }

  // 允许空值跳过验证
  // 如果给定值为空,则会跳过任何规则(除了自定义规则)
  Validasi.number().nullable().parse(null); // 成功

  // 自定义消息和字段名
  var nameSchema = Validasi.string().minLength(1, message: '姓名必须填写!');

  try {
    nameSchema.parse(null, path: 'name'); // 将抛出 FieldError: 姓名必须填写
  } catch (e) {
    print(e);
  }

  // 对象模式验证
  var payloadSchema = Validasi.object({
    'name': Validasi.string().minLength(1).maxLength(200),
    'address': Validasi.string().minLength(1).maxLength(255)
  });

  var payload = payloadSchema.parse({'name': 'Asep', 'address': 'Somewhere else...'});

  print(payload.value); // 返回解析后的有效载荷(已转换)

  // 数组验证
  var arrSchema = Validasi.array(Validasi.string().minLength(1));

  // 使用 `try` 前缀避免抛出任何异常
  var arr = arrSchema.tryParse(['test']);

  print(arr.value); // 返回有效载荷(已转换)

  // 表单助手(用于 Flutter)

  // 组合助手
  var group = GroupValidator(
      {'field1': Validasi.string(), 'field2': Validasi.number()});

  try {
    group.validate('field1', 10); // String?(field1 不是字符串)
  } catch (e) {
    print(e);
  }

  // 内联字段助手
  FieldValidator(Validasi.string())
      .validate(10); // String?(字段不是字符串)
}

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

1 回复

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


validasi 是一个用于 Flutter 的表单验证插件,它可以帮助开发者轻松地对表单字段进行验证。虽然 Flutter 本身已经提供了 FormTextFormField 等组件来进行表单验证,但 validasi 插件提供了一些额外的功能和便捷的验证规则,使得表单验证更加简单和高效。

安装 validasi 插件

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

dependencies:
  flutter:
    sdk: flutter
  validasi: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用 validasi 插件

1. 导入 validasi 插件

import 'package:validasi/validasi.dart';

2. 创建表单并应用验证规则

validasi 插件提供了一些内置的验证规则,例如 RequiredValidatorEmailValidatorMinLengthValidator 等。你可以将这些验证器应用到 TextFormField 或其他输入组件上。

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

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Validasi Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                controller: _emailController,
                decoration: InputDecoration(labelText: 'Email'),
                validator: Validasi.compose([
                  RequiredValidator(errorText: 'Email is required'),
                  EmailValidator(errorText: 'Invalid email address'),
                ]),
              ),
              SizedBox(height: 16),
              TextFormField(
                controller: _passwordController,
                decoration: InputDecoration(labelText: 'Password'),
                obscureText: true,
                validator: Validasi.compose([
                  RequiredValidator(errorText: 'Password is required'),
                  MinLengthValidator(6, errorText: 'Password must be at least 6 characters'),
                ]),
              ),
              SizedBox(height: 24),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // Form is valid, proceed with the action
                    print('Form is valid');
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

3. 自定义验证规则

你也可以创建自定义的验证规则。只需继承 Validator 类并实现 validate 方法。

class CustomValidator extends Validator {
  @override
  String? validate(String? value) {
    if (value == null || value.isEmpty) {
      return 'This field is required';
    }
    if (value.length < 5) {
      return 'Field must be at least 5 characters';
    }
    return null;
  }
}

然后在表单中使用它:

TextFormField(
  decoration: InputDecoration(labelText: 'Custom Field'),
  validator: CustomValidator().validate,
),

4. 使用 Validasi.compose

Validasi.compose 方法允许你将多个验证器组合在一起。它会依次执行每个验证器,并在遇到第一个错误时返回错误信息。

validator: Validasi.compose([
  RequiredValidator(errorText: 'This field is required'),
  MinLengthValidator(5, errorText: 'Must be at least 5 characters'),
  CustomValidator(),
]),
回到顶部