local_auth实现本地生物认证

local_auth实现本地生物认证

 次点击
9 分钟阅读

所需依赖

https://pub.dev/packages/local_auth

安装依赖

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',
);

© 本文著作权归作者所有,未经许可不得转载使用。