Flutter密码验证插件password_validation_plus的使用

Flutter密码验证插件password_validation_plus的使用

password_validation_plus 是一个用于 Flutter 应用程序的密码验证插件。它提供了一个密码验证小部件,以确保您的 Flutter 应用程序中的密码强度要求。该小部件强制执行五项关键规则,并通过视觉进度指示器指导用户创建安全密码。

password_validation_plus_screenshot_1

特性

  • 密码强度规则:该小部件强制执行五个关键规则以确保强密码:

    1. 最小长度
    2. 大写字母
    3. 小写字母
    4. 特殊字符
    5. 数字(数字)
  • 实时反馈:为用户提供实时反馈,以便在他们输入密码时指示其是否满足指定的要求。

  • 密码强度指示器:可视化进度指示器,直观表示所输入密码的强度。

  • 自定义化:轻松自定义密码验证规则和小部件的外观,以匹配应用程序的需求。

Password Validation Widget Demo

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  password_validation_plus: ^0.0.1

运行 flutter pub get 命令来安装包。

使用

在 Dart 代码中导入包:

import 'package:password_validation_plus/password_validation_plus.dart';

在小部件树中使用 PasswordValidationPlus 小部件:

PasswordValidationPlus(
  textController: controller, // TextEditingController
)

自定义

可以通过向 PasswordValidationPlus 构造函数提供不同的参数来自定义密码验证小部件:

PasswordValidationPlus(
  textController: controller,
  maxLength: 12,
  minLength: 8,
  successIcon: Iconsax.tick_circle,
  unSuccessIcon: Iconsax.close_circle,
  successWidget: SvgPicture.asset(
    "assets/icons/tick.svg",
    height: 24,
  ),
  unSuccessWidget: SvgPicture.asset(
    "assets/icons/close.svg",
    height: 24,
  ),
  textSize: 16,
  hideRules: true,
),
  • textController: 设置密码文本字段的 TextEditingController。
  • minLength: 设置密码所需的最小长度。
  • maxLength: 设置密码允许的最大长度。
  • hideRules: 设置为 true 以隐藏密码验证规则。
  • successIcon: 自定义成功验证规则时显示的图标。
  • unSuccessIcon: 自定义未成功验证规则时显示的图标。
  • successWidget: 自定义成功验证规则时显示的小部件。
  • unSuccessWidget: 自定义未成功验证规则时显示的小部件。
  • textSize: 调整验证规则和图标的文本大小。

示例

以下是一个完整的使用此插件的示例:

import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:password_validation_plus/password_validation_plus.dart';

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

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

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '密码验证',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
        textTheme: GoogleFonts.signikaTextTheme(),
      ),
      home: const MyHomePage(title: '创建您的密码'),
    );
  }
}

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 _controller = TextEditingController();

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              obscureText: true,
              decoration: InputDecoration(
                labelText: '密码',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 20),
            PasswordValidationPlus(
              textController: _controller,
              maxLength: 12,
              minLength: 8,
              successIcon: Iconsax.tick_circle,
              unSuccessIcon: Iconsax.close_circle,
              successWidget: SvgPicture.asset(
                "assets/icons/tick.svg",
                height: 24,
              ),
              unSuccessWidget: SvgPicture.asset(
                "assets/icons/close.svg",
                height: 24,
              ),
              textSize: 16,
              hideRules: false,
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


password_validation_plus 是一个用于 Flutter 的密码验证插件,它可以帮助你轻松地在应用程序中验证密码的强度,并根据自定义规则提供反馈。以下是如何使用 password_validation_plus 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  password_validation_plus: ^1.0.0  # 请检查最新的版本号

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

2. 导入包

在你的 Dart 文件中导入 password_validation_plus 包:

import 'package:password_validation_plus/password_validation_plus.dart';

3. 使用 PasswordValidation

PasswordValidation 类提供了密码验证的核心功能。你可以通过配置不同的规则来验证密码的强度。

基本用法

void validatePassword() {
  PasswordValidation validation = PasswordValidation(
    password: 'MyPassword123',
    rules: [
      MinLengthRule(minLength: 8),
      UppercaseRule(),
      LowercaseRule(),
      NumberRule(),
      SpecialCharacterRule(),
    ],
  );

  if (validation.validate()) {
    print('密码符合要求');
  } else {
    print('密码不符合要求');
    print(validation.getErrors());
  }
}

规则说明

PasswordValidation 支持以下规则:

  • MinLengthRule(minLength: int):密码最小长度。
  • UppercaseRule():密码必须包含至少一个大写字母。
  • LowercaseRule():密码必须包含至少一个小写字母。
  • NumberRule():密码必须包含至少一个数字。
  • SpecialCharacterRule():密码必须包含至少一个特殊字符。

你可以根据需要添加或删除规则。

自定义错误消息

你可以为每个规则自定义错误消息:

PasswordValidation validation = PasswordValidation(
  password: 'MyPassword123',
  rules: [
    MinLengthRule(minLength: 8, errorMessage: '密码长度必须至少为8个字符'),
    UppercaseRule(errorMessage: '密码必须包含至少一个大写字母'),
    LowercaseRule(errorMessage: '密码必须包含至少一个小写字母'),
    NumberRule(errorMessage: '密码必须包含至少一个数字'),
    SpecialCharacterRule(errorMessage: '密码必须包含至少一个特殊字符'),
  ],
);

4. 获取错误信息

如果密码不符合规则,你可以通过 getErrors() 方法获取所有错误信息:

List<String> errors = validation.getErrors();
for (String error in errors) {
  print(error);
}

5. 集成到 UI

你可以将 PasswordValidation 集成到 Flutter 的 UI 中,例如在用户输入密码时实时验证并显示错误信息。

class PasswordField extends StatefulWidget {
  [@override](/user/override)
  _PasswordFieldState createState() => _PasswordFieldState();
}

class _PasswordFieldState extends State<PasswordField> {
  String _password = '';
  List<String> _errors = [];

  void _validatePassword(String value) {
    setState(() {
      _password = value;
      PasswordValidation validation = PasswordValidation(
        password: _password,
        rules: [
          MinLengthRule(minLength: 8),
          UppercaseRule(),
          LowercaseRule(),
          NumberRule(),
          SpecialCharacterRule(),
        ],
      );
      _errors = validation.validate() ? [] : validation.getErrors();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: [
        TextField(
          onChanged: _validatePassword,
          obscureText: true,
          decoration: InputDecoration(
            labelText: '密码',
          ),
        ),
        ..._errors.map((error) => Text(error, style: TextStyle(color: Colors.red))).toList(),
      ],
    );
  }
}
回到顶部