Flutter输入验证插件in_validator的使用

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

Flutter输入验证插件 in_validator 的使用

in_validator 是一个用于验证印度身份号码(如PAN、AADHAAR等)的Flutter插件。虽然该插件不会与政府数据进行验证,但它通过正则表达式和算法来验证这些号码。

特性

  • 验证PAN
  • 验证AADHAAR
  • 验证驾驶执照号码
  • 验证GST号码
  • 验证护照号码

开始使用

在您的 pubspec.yml 文件中添加以下依赖项:

dependencies:
  in_validator: {version}

请将 {version} 替换为最新的版本号。

使用方法

首先,导入 in_validator 包:

import 'package:in_validator/in_validator.dart';

然后,您可以使用以下方法来验证不同的身份号码:

验证PAN

bool isValidPAN = PANValidator().isValid('XXXXX9999X');
print(isValidPAN); // 输出 true 或 false

验证AADHAAR

bool isValidAadhaar = AadhaarValidator().isValid('999941057058');
print(isValidAadhaar); // 输出 true 或 false

验证驾驶执照号码

bool isValidDL = DrivingLicenseValidator().isValid('HR-0620220034761');
print(isValidDL); // 输出 true 或 false

验证GST号码

bool isValidGST = GSTValidator().isValid('10AABCU9603R1Z2');
print(isValidGST); // 输出 true 或 false

验证护照号码

bool isValidPassport = PassportValidator().isValid('A2190457');
print(isValidPassport); // 输出 true 或 false

示例 Demo

完整的示例代码如下所示,展示如何在一个Flutter应用中集成 in_validator 插件:

import 'package:flutter/material.dart';
import 'package:in_validator/in_validator.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(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      debugShowCheckedModeBanner: false,
      home: const Example(),
    );
  }
}

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

  [@override](/user/override)
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  final TextEditingController _panController = TextEditingController();
  final TextEditingController _aadhaarController = TextEditingController();
  final TextEditingController _dlController = TextEditingController();
  final TextEditingController _gstController = TextEditingController();
  final TextEditingController _passportController = TextEditingController();

  bool _isPanValid = false;
  bool _isAadhaarValid = false;
  bool _isDlValid = false;
  bool _isGstValid = false;
  bool _isPassportValid = false;

  void _validateInputs() {
    setState(() {
      _isPanValid = PANValidator().isValid(_panController.text);
      _isAadhaarValid = AadhaarValidator().isValid(_aadhaarController.text);
      _isDlValid = DrivingLicenseValidator().isValid(_dlController.text);
      _isGstValid = GSTValidator().isValid(_gstController.text);
      _isPassportValid = PassportValidator().isValid(_passportController.text);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('in_validator Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _panController,
              decoration: InputDecoration(
                labelText: 'PAN Number',
                errorText: !_isPanValid && _panController.text.isNotEmpty ? 'Invalid PAN' : null,
              ),
            ),
            TextField(
              controller: _aadhaarController,
              decoration: InputDecoration(
                labelText: 'AADHAAR Number',
                errorText: !_isAadhaarValid && _aadhaarController.text.isNotEmpty ? 'Invalid AADHAAR' : null,
              ),
            ),
            TextField(
              controller: _dlController,
              decoration: InputDecoration(
                labelText: 'Driving License Number',
                errorText: !_isDlValid && _dlController.text.isNotEmpty ? 'Invalid DL' : null,
              ),
            ),
            TextField(
              controller: _gstController,
              decoration: InputDecoration(
                labelText: 'GST Number',
                errorText: !_isGstValid && _gstController.text.isNotEmpty ? 'Invalid GST' : null,
              ),
            ),
            TextField(
              controller: _passportController,
              decoration: InputDecoration(
                labelText: 'Passport Number',
                errorText: !_isPassportValid && _passportController.text.isNotEmpty ? 'Invalid Passport' : null,
              ),
            ),
            ElevatedButton(
              onPressed: _validateInputs,
              child: const Text('Validate'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用in_validator插件进行输入验证的代码示例。in_validator是一个用于表单验证的Flutter包,可以帮助开发者轻松实现各种输入验证逻辑。

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

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

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

以下是一个简单的示例,展示了如何使用in_validator进行输入验证:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('in_validator 示例'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: MyForm(),
        ),
      ),
    );
  }
}

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

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

  @override
  void initState() {
    super.initState();
    _nameController = TextEditingController();
    _emailController = TextEditingController();
    _passwordController = TextEditingController();
  }

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

  void _submitForm() {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      // 在这里处理表单提交逻辑
      print('表单提交成功');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        children: [
          TextFormField(
            controller: _nameController,
            decoration: InputDecoration(labelText: '姓名'),
            validator: (value) {
              if (value == null || value.isEmpty) {
                return '姓名不能为空';
              }
              return null;
            },
          ),
          TextFormField(
            controller: _emailController,
            decoration: InputDecoration(labelText: '邮箱'),
            validator: (value) {
              final emailValidator = EmailValidator();
              if (value == null || value.isEmpty || !emailValidator.isValid(value)) {
                return '请输入有效的邮箱地址';
              }
              return null;
            },
          ),
          TextFormField(
            controller: _passwordController,
            decoration: InputDecoration(labelText: '密码'),
            obscureText: true,
            validator: (value) {
              if (value == null || value.isEmpty || value.length < 6) {
                return '密码不能为空且长度至少为6位';
              }
              return null;
            },
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _submitForm,
            child: Text('提交'),
          ),
        ],
      ),
    );
  }
}

// EmailValidator 类使用 in_validator 包中的实现
class EmailValidator {
  bool isValid(String email) {
    // 使用正则表达式验证邮箱格式
    final RegExp emailRegex = RegExp(
        r'^(([^<>()\[\]\\.,;:\s@\"]+(\.[^<>()\[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$');
    return emailRegex.hasMatch(email);
  }
}

注意:在这个示例中,虽然EmailValidator类看起来像是手动实现的,但in_validator包通常提供了一系列现成的验证器,包括用于验证邮箱地址的。然而,为了简洁和清晰,这里直接使用了正则表达式进行邮箱验证。如果你需要更全面的验证功能,建议查阅in_validator的官方文档,了解如何使用它提供的内置验证器。

此外,如果你确实想使用in_validator包中的邮箱验证器,你可能需要按照该包的文档进行导入和使用。由于in_validator的API可能会随着版本更新而变化,因此请参考最新的官方文档以获取准确的用法。

回到顶部