Flutter表单验证插件all_validations_br的使用

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

Flutter表单验证插件all_validations_br的使用

项目描述 🚀

AllValidations BR 是一个轻量且高效的Flutter库,旨在加速数据验证和简化数据操作。结合多种功能,它非常适合提高应用程序开发的生产力。

功能 ⚙️

一般验证

  • 类型和格式验证:
    • isNull, isNum, isNumericOnly, isNumericFloat
    • isAlphabetOnly, isLowercase, isUppercase
    • isUUID, isJSON, isHexadecimal
    • isEmail, isURL

特定验证

  • 巴西特定验证:
    • isCpf, isCnpj, isRG, isValidBRZip
    • isBrazilianCellPhone, isBrazilianLandline
    • isLeapYear, isValidBrazilianLicensePlate
    • 验证PIX密钥:CPF、电子邮件、电话和随机密钥

文本处理

  • 移除特殊字符:
    • removeCharacters, removeNonNumeric, removeAccents
  • 数据格式化:
    • CPF: 123.456.789-09
    • CNPJ: 12.345.678/0001-95
    • 手机号: (11) 99999-9999
    • 货币: R$ 1.234,56
    • 日期和时间: 01/01/2023, 12:30:45
  • 其他操作:
    • 比较句子: isPhraseEqual
    • 首字母大写: capitalizeWords

日期工具

  • 时间转换:
    • UTC转本地: convertUtcToLocal
    • 本地转UTC: convertLocalToUtc
  • 日期计算:
    • 两个日期之间的天数: daysBetween
    • 两个日期之间的工作日: businessDaysBetween
    • 计算年龄: calculateAge

高级功能

  • 正则表达式验证:
    • 邮箱、URL、UUID、强密码
  • 生成和操作:
    • 生成随机字符串: generateRandomString
    • 生成随机数字: generateRandomInt
    • 货币格式化: formatCurrency
    • 移除HTML标签: removeHtmlTags
  • 设备信息:
    • 获取操作系统和Dart版本: getDeviceInfo
  • 加密
    • 加密密码和验证: encryptPassword, validatePassword

使用示例 🧪

参数验证

import 'package:all_validations_br/all_validations_br.dart';

class TestParameters extends ValidationNotifiable {
  final String name;
  final String email;

  TestParameters({
    required this.name,
    required this.email,
  }) {
    addNotifications(Contract()
        .hasMinLen(name, 2, 'TestParameters.Name', "Nome deve ter no mínimo 2 caracteres!")
        .isEmail(email, "TestParameters.Email", "Email deve ser preenchido!"));
  }
}

void main() {
  final testParameters = TestParameters(email: "exemplo@teste.com", name: "c");

  if (testParameters.isValid) {
    print("Válido");
  } else {
    print("Inválido");
    testParameters.notifications.forEach((f) => print(f.message));
  }
}

CPF验证

var isCpf = AllValidations.isCpf("000.000.000-00"); 
// 返回 false

移除字符

var remover = AllValidations.removeCharacters("000.000.000-00"); 
// 返回: 00000000000

比较密码或句子

var comparacao = AllValidations.isPhraseEqual("123456789", "123456789");
// 返回: true

周日列表

var diasDaSemana = AllValidationsGetWeek.listDaysWeekAbvr;
// 返回: ['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado', 'Domingo']

移除重音和特殊字符

var texto = AllValidations.removeAccents("áãé");
// 返回: aae

通过区号返回州

print(AllValidations.getStateByDDD("11")); 
// 输出: BrazilianState.SP

验证JSON映射中的键

Map<String, dynamic> map1 = {"status": "success", "message": "successfully logged out"};

bool existe = AllValidations.isMapExists(map: map1, key: ['status']);
// 返回: true

完整示例

以下是一个完整的示例,展示了如何在Flutter应用中使用all_validations_br进行CPF验证:

import 'package:all_validations_br/all_validations_br.dart';
import 'package:flutter/material.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(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '验证结果: ',
            ),
            Text(AllValidations.isCpf('00000000000') ? '无效' : '有效'),
            Text(AllValidations.isCpf('728.551.470-50') ? '有效' : '无效'),
            Text(AllValidations.isCpf('72855147050') ? '有效' : '无效'),
          ],
        ),
      ),
    );
  }
}

文档和Wiki 📖

更多关于库的使用细节,请访问我们的 Wiki

安装 📦

在您的 pubspec.yaml 文件中添加依赖:

dependencies:
  all_validations_br:

许可证 📜

本项目采用MIT许可证。

开发者 💻

由热爱Flutter开发的团队创建,旨在简化Flutter开发。


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

1 回复

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


当然,以下是如何在Flutter项目中使用all_validations_br插件进行表单验证的示例代码。这个插件主要用于巴西的特定验证规则,但也可以用于一般的表单验证。

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

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

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

接下来,创建一个简单的Flutter应用,展示如何使用all_validations_br进行表单验证。

import 'package:flutter/material.dart';
import 'package:all_validations_br/all_validations_br.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 _formKey = GlobalKey<FormState>();
  String _name = '';
  String _email = '';
  String _cpf = '';
  String _phone = '';
  bool _autoValidate = false;

  void _validateInputs() {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      print('Name: $_name');
      print('Email: $_email');
      print('CPF: $_cpf');
      print('Phone: $_phone');
    } else {
      setState(() {
        _autoValidate = true;
      });
    }
  }

  @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,
          autovalidateMode: _autoValidate ? AutovalidateMode.always : AutovalidateMode.disabled,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Name'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Name is required';
                  }
                  return null;
                },
                onSaved: (value) {
                  _name = value!;
                },
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                keyboardType: TextInputType.emailAddress,
                validator: (value) {
                  if (!EmailValidator().isValid(value!)) {
                    return 'Invalid email';
                  }
                  return null;
                },
                onSaved: (value) {
                  _email = value!;
                },
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'CPF'),
                keyboardType: TextInputType.number,
                validator: (value) {
                  if (!CpfValidator().isValid(value!)) {
                    return 'Invalid CPF';
                  }
                  return null;
                },
                onSaved: (value) {
                  _cpf = value!;
                },
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Phone'),
                keyboardType: TextInputType.phone,
                validator: (value) {
                  if (!PhoneValidator().isValid(value!)) {
                    return 'Invalid phone number';
                  }
                  return null;
                },
                onSaved: (value) {
                  _phone = value!;
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _validateInputs,
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们使用了all_validations_br插件中的CpfValidatorPhoneValidator进行CPF和电话号码的验证。此外,我们还使用了Flutter内置的FormTextFormField来创建表单,并添加了简单的名称和电子邮件验证。

请注意,PhoneValidator可能需要根据巴西的具体电话号码格式进行调整,因为all_validations_br插件中的验证规则可能针对特定的格式。你可能需要查阅该插件的文档来确认验证规则是否满足你的需求。

回到顶部