| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import 'package:flutter/services.dart';
- import 'package:appfx/utils/logger.dart';
- import 'package:local_auth/local_auth.dart';
- import 'package:flutter_secure_storage/flutter_secure_storage.dart';
- export 'package:local_auth/local_auth.dart' show BiometricType;
- class BiometricAuthUtils {
- bool canCheckBiometrics = false;
- List<BiometricType> availableBiometrics = [];
- final LocalAuthentication auth = LocalAuthentication();
- final FlutterSecureStorage storage = const FlutterSecureStorage();
- Future<void> init() async {
- try {
- canCheckBiometrics = await checkBiometrics();
- if (canCheckBiometrics) {
- availableBiometrics = await getAvailableBiometrics();
- }
- } catch (error) {
- Log.e('init error: $error');
- }
- }
- bool get isSupportFaceId {
- return availableBiometrics.any((type) => type == BiometricType.face);
- }
- bool get isSupportTouchId {
- return availableBiometrics.any((type) => type == BiometricType.fingerprint);
- }
- // 检查设备是否支持生物识别
- Future<bool> checkBiometrics() async {
- try {
- canCheckBiometrics = await auth.canCheckBiometrics;
- return canCheckBiometrics;
- } on PlatformException catch (e) {
- Log.e('检查设备是否支持生物识别失败: $e');
- canCheckBiometrics = false;
- return false;
- }
- }
- // 获取可用的生物识别类型
- Future<List<BiometricType>> getAvailableBiometrics() async {
- try {
- availableBiometrics = await auth.getAvailableBiometrics();
- return availableBiometrics;
- } on PlatformException catch (e) {
- Log.e('获取生物识别类型失败: $e');
- availableBiometrics = [];
- return availableBiometrics;
- }
- }
- // 进行生物识别认证
- Future<bool> authenticateWithBiometrics(String reason) async {
- try {
- final bool didAuthenticate = await auth.authenticate(
- localizedReason: reason, // '请进行人脸识别以访问您的密码',
- biometricOnly: true,
- sensitiveTransaction: true,
- persistAcrossBackgrounding: false,
- );
- return didAuthenticate;
- } on PlatformException catch (e) {
- Log.e('认证失败: $e');
- return false;
- }
- }
- }
|