Flutter表单验证插件flux_validator_dart的使用

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

Flutter表单验证插件flux_validator_dart的使用

1. 简介

flux_validator_dart 是一个用于Dart的字符串和输入数据验证的包。它提供了多种验证方法,适用于电子邮件、电话号码、巴西CPF、CNPJ等常见格式的验证。

2. 使用步骤

2.1 安装

首先,在 pubspec.yaml 文件中添加 flux_validator_dart 依赖:

dependencies:
  flux_validator_dart: ^latest_version

然后在终端中运行以下命令来安装依赖:

pub get
2.2 导入

在 Dart 文件中导入 flux_validator_dart 包:

import 'package:flux_validator_dart/flux_validator_dart.dart';
2.3 使用

flux_validator_dart 提供了多种验证方法,可以直接调用这些方法进行验证。例如,验证电子邮件:

Validator.email(value) // 返回 bool

3. 验证选项

以下是 flux_validator_dart 提供的一些常见验证选项:

  • Mercosul车牌:验证格式为 AAA-0000AAA-0A00 的车牌号。

    Validator.carPlate(value)
    
  • 巴西邮政编码 (CEP):验证格式为 00000-000 的邮政编码。

    Validator.cep(value)
    
  • 巴西驾驶证 (CNH):验证格式为 00000000000 的驾驶证号码。

    Validator.cnh(value)
    
  • 巴西公司税号 (CNPJ):验证格式为 00.000.000/0000-00 的公司税号。

    Validator.cnpj(value)
    
  • 巴西个人税号 (CPF):验证格式为 000.000.000-00 的个人税号。

    Validator.cpf(value)
    
  • 巴西电话号码:验证格式为 +55 (11) 0 0000-0000 的电话号码。

    Validator.phone(value)
    
  • 日期 (dd/mm/yyyy):验证格式为 00/00/0000 的日期。

    Validator.date(value)
    
  • 电子邮件:验证电子邮件地址。

    Validator.email(value)
    
  • 数字:验证是否只包含数字。

    Validator.numbers(value)
    
  • 字母:验证是否只包含字母。

    Validator.letters(value)
    
  • 巴西车辆识别码 (Renavam):验证格式为 00000000000 的车辆识别码。

    Validator.renavam(value)
    

4. 完整示例 Demo

下面是一个完整的 Flutter 表单验证示例,展示了如何使用 flux_validator_dart 进行表单验证。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final appTitle = '表单验证演示';

    return MaterialApp(
      title: appTitle,
      home: Scaffold(
        appBar: AppBar(
          title: Text(appTitle),
        ),
        body: MyCustomForm(),
      ),
    );
  }
}

// 创建一个 Form 小部件
class MyCustomForm extends StatefulWidget {
  [@override](/user/override)
  MyCustomFormState createState() {
    return MyCustomFormState();
  }
}

// 创建一个对应的 State 类
// 这个类保存与表单相关的数据
class MyCustomFormState extends State<MyCustomForm> {
  // 创建一个全局键,唯一标识 Form 小部件
  // 并允许验证表单。
  //
  // 注意:这是 GlobalKey<FormState>,
  // 不是 GlobalKey<MyCustomFormState>。
  final _formKey = GlobalKey<FormState>();

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 构建一个 Form 小部件,使用上面创建的 _formKey。
    return Form(
      key: _formKey,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          // 电子邮件输入框
          TextFormField(
            decoration: InputDecoration(
              labelText: '电子邮件',
            ),
            validator: (value) {
              // 如果电子邮件无效,返回错误信息
              if (!Validator.email(value)) {
                return '请输入有效的电子邮件。';
              }
              return null;
            },
          ),
          
          // CNPJ 输入框
          TextFormField(
            decoration: InputDecoration(
              labelText: '公司税号 (CNPJ)',
            ),
            validator: (value) {
              // 如果 CNPJ 无效,返回错误信息
              if (!Validator.cnpj(value)) {
                return '请输入有效的公司税号 (CNPJ)。';
              }
              return null;
            },
          ),
          
          // Mercosul 车牌输入框
          TextFormField(
            decoration: InputDecoration(
              labelText: 'Mercosul 车牌',
            ),
            validator: (value) {
              // 如果车牌无效,返回错误信息
              if (!Validator.carPlate(value)) {
                return '请输入有效的 Mercosul 车牌。';
              }
              return null;
            },
          ),
          
          // 提交按钮
          Padding(
            padding: const EdgeInsets.symmetric(vertical: 16.0),
            child: MaterialButton(
              onPressed: () {
                // 验证表单是否有效
                if (_formKey.currentState.validate()) {
                  // 如果表单有效,显示 Snackbar 提示
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('正在处理数据')),
                  );
                }
              },
              child: Text('提交'),
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flux_validator_dart插件进行表单验证的代码示例。flux_validator_dart是一个用于Flutter的表单验证库,它提供了一系列方便的验证器,可以用于验证用户输入的数据。

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

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

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

接下来,让我们创建一个简单的表单,并使用flux_validator_dart进行验证。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final _formKey = GlobalKey<FormState>();
  final _nameController = TextEditingController();
  final _emailController = TextEditingController();
  late ValidationMap _validationMap;

  @override
  void initState() {
    super.initState();
    _validationMap = {
      'name': [
        RequiredValidator(errorText: 'Name is required'),
        MinLengthValidator(minLength: 3, errorText: 'Name must be at least 3 characters'),
      ],
      'email': [
        RequiredValidator(errorText: 'Email is required'),
        EmailValidator(errorText: 'Email is not valid'),
      ],
    };
  }

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

  void _submitForm() {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      // 在这里处理表单提交,比如发送数据到服务器
      print('Form submitted successfully');
    } else {
      // 使用ValidatorHelper进行更详细的验证
      final validationErrors = ValidatorHelper(_validationMap)
          .validateAll(_nameController.text, 'name')
          .validateAll(_emailController.text, 'email');

      if (validationErrors.isNotEmpty) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Please fix the following errors:\n' + validationErrors.join('\n')),
            duration: Duration(seconds: 5),
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Form Validation Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                controller: _nameController,
                decoration: InputDecoration(labelText: 'Name'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Name is required';
                  }
                  if (value.length < 3) {
                    return 'Name must be at least 3 characters';
                  }
                  return null;
                },
              ),
              TextFormField(
                controller: _emailController,
                decoration: InputDecoration(labelText: 'Email'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Email is required';
                  }
                  if (!RegExp(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$").hasMatch(value)) {
                    return 'Email is not valid';
                  }
                  return null;
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _submitForm,
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意:

  1. 上述代码展示了如何使用Flutter内置的表单验证功能(validator参数),但为了更清晰地展示flux_validator_dart的使用,我们在这里手动实现了验证逻辑。
  2. 实际上,你可以使用flux_validator_dartValidatorHelper类来替代手动验证逻辑,但在这个例子中,为了对比展示,我保留了手动验证。
  3. 要完全使用flux_validator_dart,你可以将validator函数中的逻辑替换为ValidatorHelper的调用,比如:
void _submitForm() {
  final validationErrors = ValidatorHelper(_validationMap)
      .validateAll(_nameController.text, 'name')
      .validateAll(_emailController.text, 'email');

  if (validationErrors.isNotEmpty) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text('Please fix the following errors:\n' + validationErrors.join('\n')),
        duration: Duration(seconds: 5),
      ),
    );
  } else {
    // 处理表单提交
    print('Form submitted successfully');
  }
}

并在TextFormField中移除validator参数。

这样,你就可以利用flux_validator_dart提供的强大验证功能来简化你的表单验证逻辑了。

回到顶部