Flutter表单验证插件pars_validator的使用

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

Flutter表单验证插件pars_validator的使用

1. 简介

ParsValidator 是一个专为波斯语开发人员设计的健壮且轻量级的验证库,适用于Flutter应用程序。它提供了一系列工具和实用程序,用于验证特定于波斯语的数据格式,包括国家代码、电话号码、Shamsi日期、银行卡号等。

2. 功能特性

  • 通用文本工具

    • 检查文本是否仅包含波斯字母
    • 验证给定文本的单词数量
    • 统计给定文本中的单词数
    • 将文本转换为波斯格式,替换阿拉伯字符和英文数字
    • 将波斯和阿拉伯数字转换为英文数字
    • 将数字转换为波斯字母
    • 将数字转换为波斯货币(Tomans)
    • 使用自定义分隔符和分组大小分离数字和字符串
    • 验证OTP码
    • 验证密码(可自定义参数)
    • 处理半角空格
  • 国家工具

    • 验证伊朗国家身份证
    • 生成随机有效的伊朗国家身份证
    • 获取国家身份证的签发地点
    • 验证伊朗邮政编码
    • 验证伊朗公司国家身份证
  • 银行工具

    • 验证信用卡号
    • 格式化信用卡号
    • 验证IBAN(Shaba)
    • 获取卡号对应的银行名称或图标
  • 电话、手机号、电子邮件工具

    • 验证座机和手机号码格式
    • 获取座机号码对应的省份
    • 获取手机号码对应的运营商名称或图标
    • 验证标准格式的电子邮件地址

3. 平台支持

ParsValidator 支持以下平台:

  • Android
  • iOS
  • macOS
  • Web
  • Linux
  • Windows

4. 安装

要使用此插件,请在 pubspec.yaml 文件中添加依赖项:

dependencies:
  pars_validator: ^0.5.7

然后运行以下命令来获取包:

flutter pub get

在项目中导入包:

import 'package:pars_validator/pars_validator.dart';

5. 使用示例

5.1 基本用法

以下是一个完整的示例,展示了如何在Flutter应用程序中使用 ParsValidator 进行表单验证。

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pars Validator Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Pars Validator Demo'),
    );
  }
}

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 _nationalIdController = TextEditingController();
  final TextEditingController _cardNumberController = TextEditingController();
  final TextEditingController _mobileNumberController = TextEditingController();
  final TextEditingController _emailController = TextEditingController();

  // 定义错误信息
  String? _nationalIdError;
  String? _cardNumberError;
  String? _mobileNumberError;
  String? _emailError;

  // 验证函数
  void _validateForm() {
    setState(() {
      // 清除之前的错误信息
      _nationalIdError = null;
      _cardNumberError = null;
      _mobileNumberError = null;
      _emailError = null;

      // 验证国家身份证
      if (!National.isNationalIDValid(_nationalIdController.text)) {
        _nationalIdError = '无效的国家身份证号';
      }

      // 验证信用卡号
      if (!Banker.isCardNumberValid(_cardNumberController.text)) {
        _cardNumberError = '无效的信用卡号';
      }

      // 验证手机号
      if (!Phone.isMobileNumberValid(_mobileNumberController.text)) {
        _mobileNumberError = '无效的手机号';
      }

      // 验证电子邮件
      if (!Phone.isEmailValid(_emailController.text)) {
        _emailError = '无效的电子邮件地址';
      }

      // 如果所有验证都通过,显示成功消息
      if (_nationalIdError == null &&
          _cardNumberError == null &&
          _mobileNumberError == null &&
          _emailError == null) {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('表单验证通过!')),
        );
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            // 国家身份证输入框
            TextField(
              controller: _nationalIdController,
              decoration: InputDecoration(
                labelText: '国家身份证号',
                errorText: _nationalIdError,
              ),
            ),
            const SizedBox(height: 16),

            // 信用卡号输入框
            TextField(
              controller: _cardNumberController,
              decoration: InputDecoration(
                labelText: '信用卡号',
                errorText: _cardNumberError,
              ),
            ),
            const SizedBox(height: 16),

            // 手机号输入框
            TextField(
              controller: _mobileNumberController,
              decoration: InputDecoration(
                labelText: '手机号',
                errorText: _mobileNumberError,
              ),
            ),
            const SizedBox(height: 16),

            // 电子邮件输入框
            TextField(
              controller: _emailController,
              decoration: InputDecoration(
                labelText: '电子邮件',
                errorText: _emailError,
              ),
            ),
            const SizedBox(height: 16),

            // 提交按钮
            ElevatedButton(
              onPressed: _validateForm,
              child: const Text('提交'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用pars_validator插件进行表单验证的代码示例。pars_validator是一个用于Flutter的表单验证库,它提供了简单且强大的验证功能。

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

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Form Validation with pars_validator'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            TextField(
              controller: _emailController,
              decoration: InputDecoration(
                labelText: 'Email',
                errorText: _validator.validate(_emailController.text, 'email')?.error,
              ),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _passwordController,
              obscureText: true,
              decoration: InputDecoration(
                labelText: 'Password',
                errorText: _validator.validate(_passwordController.text, 'password')?.error,
              ),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                final Map<String, ParsValidationResult> results = {
                  'email': _validator.validate(_emailController.text, 'email'),
                  'password': _validator.validate(_passwordController.text, 'password'),
                };

                bool isValid = true;
                results.forEach((key, value) {
                  if (value != null && value.hasError) {
                    isValid = false;
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text(value.error!)),
                    );
                  }
                });

                if (isValid) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Form is valid')),
                  );
                  // 处理有效表单数据
                }
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }

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

// 在应用启动时初始化ParsValidator规则
void initParsValidator() {
  ParsValidator().addRules({
    'email': [
      RequiredRule(),
      EmailRule(),
    ],
    'password': [
      RequiredRule(),
      MinLengthRule(6),
    ],
  });
}

// 在main函数之前调用initParsValidator()来初始化规则
// 注意:在真实应用中,你可能希望将初始化逻辑放在一个更合适的位置,
// 比如一个单例或服务中,而不是在全局作用域中调用它。
// 由于示例的简洁性,这里直接在main函数之前调用。
void _init() {
  initParsValidator();
}

void mainPreInit() {
  _init(); // 确保在main函数执行前调用
  runApp(MyApp());
}

// 由于Dart不允许在main函数之前直接执行代码,
// 这里我们使用一个变通的方法:将main函数重命名为mainPreInit并在其内调用初始化函数,
// 然后调用实际的mainPreInit函数。在真实项目中,你可能需要找到其他方法来确保初始化逻辑的执行。
// 一种更好的做法是使用一个延迟初始化器或构造一个全局单例来管理初始化。
// 但为了保持示例的简洁性,这里我们保持这种直接调用的方式。
// 注意:在实际应用中,请避免使用这种方法,因为它依赖于Dart的执行顺序,这不是一个好的实践。
// 这里只是为了演示目的。

注意

  1. 在真实应用中,避免在全局作用域中直接调用初始化函数,应该使用更合适的初始化策略,如延迟初始化或单例模式。
  2. 上述代码中的mainPreInit部分只是为了演示目的,在实际项目中请避免这种做法。
  3. pars_validator库的版本号和具体API可能会随着时间变化,请参考官方文档获取最新信息。

希望这个示例能帮你理解如何在Flutter中使用pars_validator进行表单验证。

回到顶部