所需依赖
安装依赖
flutter pub add local_auth权限
安卓
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>修改原生类
工具类
import 'package:local_auth/local_auth.dart';
import 'package:local_auth_android/local_auth_android.dart';
typedef AuthCallback = Future<void> Function();
class AuthUtil {
AuthUtil._();
static final LocalAuthentication _auth = LocalAuthentication();
/// 判断设备是否支持任何认证
static Future<bool> isAuthSupported() async {
try {
return await _auth.canCheckBiometrics || await _auth.isDeviceSupported();
} catch (_) {
return false;
}
}
/// 获取支持的生物识别类型
static Future<List<BiometricType>> getBiometricTypes() async {
try {
return await _auth.getAvailableBiometrics();
} catch (_) {
return [];
}
}
/// 核心方法:认证成功后执行 callback
static Future<bool> authenticateAndRun(
AuthCallback callback, {
String reason = '请验证身份以继续',
}) async {
if (!await isAuthSupported()) {
print('设备不支持任何认证');
return false;
}
bool success = false;
try {
// ⭐ 使用最新 local_auth API
success = await _auth.authenticate(
localizedReason: reason,
persistAcrossBackgrounding:true,
sensitiveTransaction:true,
authMessages: const <AuthMessages>[
AndroidAuthMessages(
signInHint: '',
signInTitle: '您正在进行高危操作,需验证您的身份以继续',
cancelButton: '取消',
),
],
biometricOnly: false, // true = 优先生物识别
);
if (success) {
await callback();
return true;
}
} catch (e) {
print('认证失败:$e');
}
return false;
}
}使用方法
例如:我们现在要删除用户
await AuthUtil.authenticateAndRun(() async {
debugPrint("生物认证成功!");
// TODO:业务逻辑
},
reason:'验证后即可删除用户xxx',
);