Flutter密码强度计算插件flutter_password_calculator的使用

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

Flutter密码强度计算插件flutter_password_calculator的使用

Introduction

FlutterPasswordCalculator 是一个作为密码验证字段的小部件。你可以拥有普通密码字段的所有功能,并且还可以设置验证规则和密码强度。

基本用法

最简单的用法是不带任何属性直接使用 FlutterPasswordCalculator

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        body: FlutterPasswordCalculator(),
      ),
    );
  }
}

这将创建一个具有某些默认配置的密码字段。默认行为是在表单字段上方显示强度指示器。你可以通过传递 falsehasStrengthIndicator 属性来禁用此行为。

我们可以更进一步,向我们的小部件传递一些验证规则。

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        body: FlutterPasswordCalculator(
          validationRules: {
            DigitValidationRule(),
            UppercaseValidationRule(),
            LowercaseValidationRule(),
            SpecialCharacterValidationRule(),
            MinCharactersValidationRule(6),
            MaxCharactersValidationRule(12),
          },
        ),
      ),
    );
  }
}

该包包含一些预定义的常用规则,因此你可以直接使用它们。你也可以自由地实现自己的 [ValidationRule] 并通常添加到密码字段中。

自定义规则

如前所述,该包带有内置的常用规则,但你可以创建自己的自定义规则。为此,只需扩展基 [ValidationRule] 抽象类即可。你需要为你的规则提供名称和验证函数。

class ContainsTripleAValidationRule extends ValidationRule {
  [@override](/user/override)
  String get name => 'Contains AAA';

  [@override](/user/override)
  bool validate(String value) {
    return value.contains('AAA');
  }
}

仅仅这样做就足以使你的规则生效。将你的规则传递给 [validationRules] 集合中的 [FlutterPasswordCalculator],显示和验证规则就会发生。

密码控制器

[FlutterPasswordCalculator] 具有一个可以传递的控制器。这个控制器的目的与 Flutter 世界中的其他控制器几乎相同。控制器为你提供了对字段的底层信息的访问。特别是,它为你提供了有关规则的信息以及哪些规则在任何时刻被违反了。控制器还有一个获取器,用于指示所有规则是否都已通过。

一个使用案例是如果你想验证表单字段的状态以启用或禁用表单的保存。

final FlutterPasswordCalculatorController _passwordController = FlutterPasswordCalculatorController();

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Form(
        key: _formKey,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(
              width: 400,
              child: FlutterPasswordCalculator(
                passwordController: _passwordController,
                validationRules: {
                  DigitValidationRule(),
                  UppercaseValidationRule(),
                },
                validator: (value) {
                  return _passwordController.areAllRulesValidated
                      ? null
                      : 'Not Validated';
                },
              ),
            ),
          ],
        ),
      ),
    ),
  );
}

定制

[FlutterPasswordCalculator] 包含一些预定义的小部件,这些小部件显示了一些看起来不错的强度指示器和规则组件。但是,该小部件被设计为完全可定制的。因此,你可以传递自己的构建器到强度密码小部件和规则小部件。

上面我们看到了这些字段的一些可能的定制示例。

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        body: SizedBox(
          width: 400,
          child: FlutterPasswordCalculator(
            validationRules: {
              DigitValidationRule(),
              UppercaseValidationRule(),
              LowercaseValidationRule(),
              SpecialCharacterValidationRule(),
              MinCharactersValidationRule(6),
              MaxCharactersValidationRule(12),
            },
            strengthIndicatorBuilder: (strength) =>
                Text(
                  strength.toString(),
                ),
            validationRuleBuilder: (rules, value) {
              if (value.isEmpty) {
                return const SizedBox.shrink();
              }
              return ListView(
                shrinkWrap: true,
                children: rules
                    .map(
                      (rule) =>
                  rule.validate(value)
                      ? Row(
                    children: [
                      const Icon(
                        Icons.check,
                        color: Colors.green,
                      ),
                      const SizedBox(width: 12),
                      Text(
                        rule.name,
                        style: const TextStyle(
                          color: Colors.green,
                        ),
                      ),
                    ],
                  )
                      : Row(
                    children: [
                      const Icon(
                        Icons.close,
                        color: Colors.red,
                      ),
                      const SizedBox(width: 12),
                      Text(
                        rule.name,
                        style: const TextStyle(
                          color: Colors.red,
                        ),
                      ),
                    ],
                  ),
                )
                    .toList(),
              );
            },
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 flutter_password_calculator 插件来计算密码强度的 Flutter 代码示例。

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

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

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中使用 flutter_password_calculator 插件。以下是一个完整的示例,展示了如何计算密码强度:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Password Strength Calculator Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PasswordStrengthScreen(),
    );
  }
}

class PasswordStrengthScreen extends StatefulWidget {
  @override
  _PasswordStrengthScreenState createState() => _PasswordStrengthScreenState();
}

class _PasswordStrengthScreenState extends State<PasswordStrengthScreen> {
  final _formKey = GlobalKey<FormState>();
  String _password = '';
  PasswordStrength _strength = PasswordStrength.veryWeak;

  void _submit() {
    if (_formKey.currentState?.validate() ?? false) {
      _formKey.currentState?.save();
      
      // 计算密码强度
      final strength = calculatePasswordStrength(_password);
      setState(() {
        _strength = strength;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Password Strength Calculator'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(labelText: 'Password'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Password cannot be empty';
                  }
                  return null;
                },
                onSaved: (value) {
                  _password = value!;
                },
                obscureText: true,
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: _submit,
                child: Text('Calculate Strength'),
              ),
              SizedBox(height: 16),
              Text(
                'Password Strength: $_strength',
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
              ),
            ],
          ),
        ),
      ),
    );
  }

  PasswordStrength calculatePasswordStrength(String password) {
    final policy = PasswordPolicy(
      minLength: 8,
      maxLength: 20,
      lowerCase: true,
      upperCase: true,
      digits: true,
      specialChars: true,
    );

    final result = evaluatePasswordStrength(password, policy);

    switch (result) {
      case Strength.veryWeak:
        return PasswordStrength.veryWeak;
      case Strength.weak:
        return PasswordStrength.weak;
      case Strength.medium:
        return PasswordStrength.medium;
      case Strength.strong:
        return PasswordStrength.strong;
      case Strength.veryStrong:
        return PasswordStrength.veryStrong;
      default:
        return PasswordStrength.veryWeak; // Default case
    }
  }
}

enum PasswordStrength {
  veryWeak,
  weak,
  medium,
  strong,
  veryStrong,
}

在这个示例中,我们定义了一个简单的 Flutter 应用,用户可以在其中输入密码,并点击按钮来计算密码强度。calculatePasswordStrength 方法根据定义的 PasswordPolicy 来评估密码强度,并返回一个 PasswordStrength 枚举值。

注意:flutter_password_calculator 插件的具体 API 可能会随着版本更新而变化,因此请参考最新的插件文档以确保代码兼容。如果插件不直接返回类似 PasswordStrength 的枚举,你可能需要根据返回的强度值手动映射到自定义的枚举或字符串表示。

回到顶部