flutter_password_scoring 0.0.2+3
flutter_password_scoring: ^0.0.2+3 copied to clipboard
Helper library to score password strength with `dart_zxcvbn` and provide suggestions for improvement.
example/lib/main.dart
import 'dart:isolate';
import 'package:dart_zxcvbn/dart_zxcvbn.dart';
import 'package:dart_zxcvbn_language_common/dart_zxcvbn_language_common.dart';
import 'package:dart_zxcvbn_language_en/dart_zxcvbn_language_en.dart';
import 'package:flutter/material.dart';
import 'package:flutter_password_scoring/flutter_password_scoring.dart';
Future<void> handleScoring(SendPort sendPort) async {
ReceivePort receivePort = ReceivePort();
sendPort.send(receivePort.sendPort);
final langCommon = LanguageCommon();
final langEn = LanguageEn();
zxcvbn.setOptions(Options(
dictionary: Dictionary.merge([
langCommon.dictionary,
langEn.dictionary,
]),
graphs: langCommon.adjacencyGraphs,
translations: langCommon.translations,
));
// Used to refresh response when locale changes
String lastPassword = '';
await for (var message in receivePort) {
if (message is Locale) {
zxcvbn.setOptions(Options(
translations: message.languageCode == 'en'
? langEn.translations
: langCommon.translations,
));
}
lastPassword = message is String ? message : lastPassword;
if (lastPassword.isNotEmpty) {
final result = zxcvbn(lastPassword);
sendPort.send(result);
}
}
}
void main() {
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: PasswordScoringBuilder(
handler: handleScoring,
loadingPlaceholder: const CircularProgressIndicator(),
builder: (BuildContext context, Result? data,
PasswordScoringHelper helper) {
return TextField(
onChanged: helper.update,
);
},
),
),
),
);
}
}