Flutter教程指纹认证功能的实现

在Flutter中实现指纹认证功能时,调用本地生物识别API总是返回"NotAvailable"错误,但手机明明支持指纹解锁。是否必须在AndroidManifest.xml或Info.plist中额外配置权限?具体需要哪些依赖包?

另外,如何处理用户禁用系统指纹后的回调?官方文档提到的local_auth插件示例只展示了认证成功流程,但实际测试发现,当连续3次验证失败时,App会直接闪退,如何捕获这种异常并提示用户?

不同Android/iOS机型对指纹/面部识别的支持差异较大,是否有兼容性处理的通用方案?比如某些华为设备调用指纹API时要求先验证锁屏密码,这种情况该如何适配?

3 回复

实现Flutter中的指纹认证功能,你可以使用local_auth插件。首先,在pubspec.yaml中添加依赖:

dependencies:
  local_auth: ^2.1.0

接着运行flutter pub get

关键代码如下:

import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';

class FingerprintAuth extends StatefulWidget {
  @override
  _FingerprintAuthState createState() => _FingerprintAuthState();
}

class _FingerprintAuthState extends State<FingerprintAuth> {
  final LocalAuthentication auth = LocalAuthentication();

  Future<void> _authenticate() async {
    bool authenticated = false;
    try {
      authenticated = await auth.authenticate(
        localizedReason: '请验证指纹以继续',
        options: const AuthenticationOptions(stickyAuth: true),
      );
    } catch (e) {
      print(e);
    }
    if (authenticated) {
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('验证成功')));
    } else {
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('验证失败')));
    }
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: _authenticate,
      child: Text('指纹验证'),
    );
  }
}

这段代码会弹出系统指纹识别对话框,验证通过后显示成功提示。记得在Android上配置权限并在Info.plist中添加相关描述。

更多关于Flutter教程指纹认证功能的实现的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


实现Flutter中的指纹认证功能,首先确保你的设备支持指纹识别。使用local_auth插件,步骤如下:

  1. 添加依赖:在pubspec.yaml中加入local_auth: ^2.1.0

  2. 初始化权限:在Android的AndroidManifest.xml添加:

    <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
    
  3. 编写代码:导入插件并检查设备是否支持指纹识别。

    import 'package:local_auth/local_auth.dart';
    
    final LocalAuthentication auth = LocalAuthentication();
    
    Future<bool> _checkBiometric() async {
      bool canCheckBiometric = false;
      try {
        canCheckBiometric = await auth.canCheckBiometrics;
      } catch (e) {
        print(e);
      }
      return canCheckBiometric;
    }
    
  4. 请求指纹认证

    Future<void> _authenticate() async {
      bool authenticated = false;
      try {
        authenticated = await auth.authenticate(
          localizedReason: '请验证指纹以继续',
          options: const AuthenticationOptions(stickyAuth: true),
        );
      } catch (e) {
        print(e);
      }
      if (authenticated) {
        print('认证成功');
      } else {
        print('认证失败');
      }
    }
    
  5. 运行测试:在支持指纹的设备上运行应用,调用_authenticate()即可。

记得处理异常和未找到指纹的情况,提供备用方案如密码登录。

Flutter指纹认证功能实现

Flutter中实现指纹认证可以使用local_auth插件,以下是实现步骤:

1. 添加依赖

在pubspec.yaml中添加:

dependencies:
  local_auth: ^2.1.0

2. 基本实现代码

import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';

class FingerprintAuthPage extends StatefulWidget {
  @override
  _FingerprintAuthPageState createState() => _FingerprintAuthPageState();
}

class _FingerprintAuthPageState extends State<FingerprintAuthPage> {
  final LocalAuthentication _localAuth = LocalAuthentication();
  String _authStatus = '未验证';

  Future<void> _authenticate() async {
    try {
      bool canCheckBiometrics = await _localAuth.canCheckBiometrics;
      
      if (!canCheckBiometrics) {
        setState(() => _authStatus = '设备不支持生物识别');
        return;
      }

      bool authenticated = await _localAuth.authenticate(
        localizedReason: '请验证指纹以继续',
        options: const AuthenticationOptions(
          useErrorDialogs: true,
          stickyAuth: true,
        ),
      );

      setState(() {
        _authStatus = authenticated ? '验证成功' : '验证失败';
      });
      
    } catch (e) {
      setState(() => _authStatus = '发生错误: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('指纹认证')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('认证状态: $_authStatus'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _authenticate,
              child: Text('验证指纹'),
            ),
          ],
        ),
      ),
    );
  }
}

3. Android配置

在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />

4. iOS配置

在Info.plist中添加:

<key>NSFaceIDUsageDescription</key>
<string>需要FaceID进行身份验证</string>

注意:指纹认证功能需要设备支持并已设置指纹,实际使用时应处理各种异常情况。

回到顶部