Flutter生物识别认证与密码保护插件passcode_biometric_auth的使用
Flutter生物识别认证与密码保护插件passcode_biometric_auth的使用
介绍
passcode_biometric_auth
是一个用于 Flutter 应用的插件,它结合了密码认证和生物识别认证两种方式。用户可以使用指纹或面部识别来验证身份,同时也可以设置并使用密码进行认证。
使用方法
导入包
首先,在你的 pubspec.yaml
文件中添加依赖项:
dependencies:
passcode_biometric_auth: ^版本号
然后运行 flutter pub get
来安装该包。
基本示例
以下是一个基本的使用示例,展示了如何在应用中集成 passcode_biometric_auth
插件。
import 'package:flutter/material.dart';
import 'package:passcode_biometric_auth/passcode_biometric_auth.dart';
void main() {
runApp(const MaterialApp(home: App()));
}
class App extends StatefulWidget {
const App({super.key});
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
// 创建一个 PasscodeBiometricAuthUICached 实例
final auth = PasscodeBiometricAuthUICached(
forceCreatePasscode: true, // 强制创建密码
title: 'Passcode', // 标题
checkConfig: const CheckConfig(
maxRetries: 5, // 最大尝试次数
retryInSecond: 30, // 重试间隔时间(秒)
content: 'Input Passcode', // 输入提示
incorrectText:
'This passcode is incorrect (max: @{counter}/@{maxRetries} times)\n'
'You have to wait for @{retryInSecond}s to try again when the max number of retries is exceeded', // 错误提示
forgotButtonText: 'Forgot your passcode?', // 忘记密码按钮文本
useBiometricCheckboxText: 'Use biometric authentication', // 使用生物识别认证的复选框文本
maxRetriesExceededText:
'Maximum number of retries is exceeded\nPlease try again in @{second}s', // 超过最大尝试次数的提示
biometricReason: 'Please authenticate to use this feature', // 生物识别认证的理由
),
createConfig: const CreateConfig(
content: 'Create Passcode', // 创建密码提示
subcontent: 'Please remember your passcode. '
'When you forget your passcode, you can reset it but '
'all your cards will be removed from your local storage '
'and your Google account will be signed out.', // 创建密码时的附加信息
),
onForgotPasscode: (context, authUI) async {
// 处理忘记密码逻辑
if (await _forgotPasscode(context)) {
return true;
}
return false;
},
);
// 忘记密码对话框
static Future<bool> _forgotPasscode(BuildContext context) async {
final result = await showDialog<bool>(
context: context,
builder: (ctx) {
return AlertDialog(
title: const Text('Forget Passcode'),
content: const Text(
'All of your local data will be removed when reset the passcode. Would you like to continue?',
textAlign: TextAlign.justify,
),
actions: [
OutlinedButton(
child: const Text('No'),
onPressed: () {
Navigator.pop(ctx, false);
},
),
ElevatedButton(
child: const Text('Yes'),
onPressed: () {
Navigator.pop(ctx, true);
},
),
],
);
});
return result == true;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Passcode Biometric Auth'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// 认证按钮
ElevatedButton(
onPressed: () {
auth.authenticate(context);
},
child: const Text('Authenticate'),
),
const SizedBox(height: 20),
// 更改密码按钮
ElevatedButton(
onPressed: () {
auth.changePasscode(context);
},
child: const Text('Change Passcode'),
),
],
),
),
);
}
}
详细说明
基本方法
-
认证
auth.authenticate(context);
-
更改密码
auth.changePasscode(context);
自定义UI
PasscodeBiometricAuth
和 PasscodeBiometricAuthUI
类提供了更多自定义的方法,你可以根据需要扩展和修改这些类来实现更复杂的功能。
/// Base biometric auth
class PasscodeBiometricAuth {
/// 检查当前设备是否支持生物识别认证
Future<bool> isBiometricAvailable();
/// `true`: 已认证
/// `false`: 未认证或不可用
Future<bool> isBiometricAuthenticated({
String biometricReason = 'Please authenticate to use this feature',
});
/// 检查密码 `code` 是否正确
bool isPasscodeAuthenticated(String code);
/// 检查是否存在密码
bool isAvailablePasscode();
}
/// Base UI
class PasscodeBiometricAuthUI {
/// 此方法将自动处理密码和生物识别认证。
/// 如果 `forceCreatePasscode` 设置为 `true`,则应用程序会请求创建密码,如果不存在的话。
/// 如果 `false`,则应用程序只会请求创建密码,如果生物识别认证在设备上不可用。
/// 默认值由全局配置决定。
///
/// 如果 `isUseBiometric` 设置为 `true`,则应用程序将尝试使用可用的生物识别认证。
/// 默认值由全局配置决定。
Future<bool> authenticate(
BuildContext context, {
bool? forceCreatePasscode,
bool? isUseBiometric,
});
/// 检查当前设备是否支持生物识别认证
Future<bool> isBiometricAvailable();
/// 手动通过生物识别认证
Future<bool> authenticateWithBiometric();
/// 手动通过密码认证
Future<bool> authenticateWithPasscode(BuildContext context);
/// 更改密码
Future<bool> changePasscode(BuildContext context);
/// 检查密码 `code` 是否正确
Future<bool> isPasscodeAuthenticated(String code);
/// 设置 `isUseBiometric` 的值
Future<void> useBiometric(bool isUse);
/// 移除当前密码
Future<void> removePasscode();
/// 检查是否存在密码
FutureOr<bool> isAvailablePasscode();
}
PasscodeBiometricAuthUICached
PasscodeBiometricAuthUICached
是 PasscodeBiometricAuthUI
的一种带有内置 onRead
和 onWrite
方法的实现,它使用了 SharedPreferences
来缓存数据。如果你需要更安全的方式来缓存数据,则应使用 PasscodeBiometricAuthUI
。
final auth = PasscodeBiometricAuthUICached(
forceCreatePasscode: true,
title: 'Passcode',
checkConfig: const CheckConfig(
maxRetries: 5,
retryInSecond: 30,
content: 'Input Passcode',
incorrectText: 'This passcode is incorrect (max: @{counter}/@{maxRetries} times)\nYou have to wait for @{retryInSecond}s to try again when the max number of retries is exceeded',
forgotButtonText: 'Forgot your passcode?',
useBiometricCheckboxText: 'Use biometric authentication',
maxRetriesExceededText: 'Maximum number of retries is exceeded\nPlease try again in @{second}s',
biometricReason: 'Please authenticate to use this feature',
),
createConfig: const CreateConfig(
content: 'Create Passcode',
subcontent: 'Please remember your passcode. When you forget your passcode, you can reset it but all your cards will be removed from your local storage and your Google account will be signed out.',
),
onForgotPasscode: (context, authUI) async {
if (await _forgotPasscode(context)) {
return true;
}
return false;
},
);
更多关于Flutter生物识别认证与密码保护插件passcode_biometric_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter生物识别认证与密码保护插件passcode_biometric_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用passcode_biometric_auth
插件来实现生物识别认证与密码保护的代码案例。
首先,确保你已经在pubspec.yaml
文件中添加了passcode_biometric_auth
依赖:
dependencies:
flutter:
sdk: flutter
passcode_biometric_auth: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤实现生物识别认证与密码保护:
- 导入插件:
import 'package:passcode_biometric_auth/passcode_biometric_auth.dart';
- 初始化插件并设置配置:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Passcode & Biometric Auth Demo'),
),
body: MainScreen(),
),
);
}
}
class MainScreen extends StatefulWidget {
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
final PasscodeBiometricAuth _auth = PasscodeBiometricAuth();
@override
void initState() {
super.initState();
// 配置插件
_configureAuth();
}
Future<void> _configureAuth() async {
// 设置密码长度(可选)
await _auth.setPasscodeLength(6);
// 设置生物识别类型(可选,Face ID, Touch ID等)
await _auth.setBiometricType(BiometricType.faceOrTouch);
// 监听认证状态变化
_auth.authStatusStream.listen((status) {
print('Auth status changed: $status');
});
}
// 其他UI逻辑和事件处理代码...
}
- 实现认证逻辑:
class _MainScreenState extends State<MainScreen> {
// ...之前的代码...
Future<void> _showLockScreen() async {
try {
// 显示认证界面并等待用户输入或认证
bool authenticated = await _auth.authenticate(
context: context,
title: 'Enter Passcode',
message: 'Please authenticate to continue',
cancelButtonText: 'Cancel',
);
if (authenticated) {
// 用户成功认证
print('User authenticated successfully');
// 跳转到受保护的页面或执行其他逻辑
} else {
// 用户取消或认证失败
print('Authentication failed or cancelled');
}
} catch (e) {
// 处理异常
print('Error during authentication: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Passcode & Biometric Auth Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _showLockScreen,
child: Text('Protect Screen'),
),
),
);
}
}
- 处理密码设置与重置(可选):
class _MainScreenState extends State<MainScreen> {
// ...之前的代码...
Future<void> _setPasscode() async {
try {
// 设置新密码
bool success = await _auth.setPasscode(
context: context,
title: 'Set Passcode',
message: 'Please create a passcode',
confirmMessage: 'Confirm your passcode',
);
if (success) {
print('Passcode set successfully');
} else {
print('Failed to set passcode');
}
} catch (e) {
print('Error setting passcode: $e');
}
}
Future<void> _resetPasscode() async {
try {
// 重置密码(通常需要当前密码或生物识别)
bool success = await _auth.resetPasscode(
context: context,
title: 'Reset Passcode',
message: 'Please authenticate to reset your passcode',
);
if (success) {
print('Passcode reset successfully');
} else {
print('Failed to reset passcode');
}
} catch (e) {
print('Error resetting passcode: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Passcode & Biometric Auth Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _showLockScreen,
child: Text('Protect Screen'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _setPasscode,
child: Text('Set Passcode'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _resetPasscode,
child: Text('Reset Passcode'),
),
],
),
),
);
}
}
以上代码展示了如何使用passcode_biometric_auth
插件来设置密码、生物识别认证以及处理认证结果。你可以根据具体需求进一步定制UI和逻辑。注意,实际项目中应该添加更多的错误处理和用户反馈,以提高用户体验和应用的健壮性。