Flutter教程指纹认证功能实现

如何在Flutter应用中实现指纹认证功能?目前使用的是local_auth插件,但在Android设备上总提示"指纹未注册",实际上系统已录入指纹。是否需要在AndroidManifest.xml额外配置权限?iOS端是否需要不同的处理方式?另外,如何处理用户取消认证或多次失败的情况?能否提供一个完整的代码示例,包括错误处理和UI交互部分?

3 回复

在Flutter中实现指纹认证功能,首先需要使用local_auth插件。以下为简单步骤:

  1. 添加依赖:在pubspec.yaml添加local_auth: ^2.0.0

  2. 初始化权限:

    import 'package:local_auth/local_auth.dart';
    
    final LocalAuthentication auth = LocalAuthentication();
    
  3. 检查设备是否支持指纹识别:

    bool canCheckBiometrics = await auth.canCheckBiometrics;
    
  4. 获取可用的生物识别类型:

    List<BiometricType> availableBiometrics = await auth.getAvailableBiometrics();
    
  5. 开始认证:

    bool authenticated = false;
    try {
      authenticated = await auth.authenticate(
          localizedReason: '请验证指纹以继续',
          options: const AuthenticationOptions(stickyAuth: true));
    } catch (e) {
      print(e);
    }
    if (authenticated) {
      print('指纹验证成功');
    }
    

确保在Android上配置AndroidManifest.xml添加指纹权限,在iOS上设置Info.plist添加描述。代码需处理异常和权限请求。

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


以下是一个简单的 Flutter 指纹认证功能实现教程:

  1. 添加依赖
    pubspec.yaml 中添加 local_auth 依赖:

    dependencies:
      local_auth: ^2.0.0
    
  2. 初始化权限
    在 Android 上,确保在 AndroidManifest.xml 添加权限:

    <uses-permission android:name="android.permission.USE_BIOMETRIC" />
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    
  3. 实现代码
    创建一个按钮,点击后调用指纹验证:

    import 'package:flutter/material.dart';
    import 'package:local_auth/local_auth.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: FingerprintPage(),
        );
      }
    }
    
    class FingerprintPage extends StatefulWidget {
      @override
      _FingerprintPageState createState() => _FingerprintPageState();
    }
    
    class _FingerprintPageState extends State<FingerprintPage> {
      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 Scaffold(
          appBar: AppBar(title: Text('指纹认证')),
          body: Center(
            child: ElevatedButton(
              onPressed: authenticate,
              child: Text('验证指纹'),
            ),
          ),
        );
      }
    }
    
  4. 测试设备支持
    在调用指纹验证前,可以先检查设备是否支持生物识别:

    bool canCheckBiometrics = await auth.canCheckBiometrics;
    

这样就能实现基本的指纹认证功能。

在Flutter中实现指纹认证功能可以使用local_auth插件,这是一个官方维护的生物识别认证库。以下是实现步骤和代码示例:

  1. 添加依赖:
dependencies:
  local_auth: ^2.1.3
  1. 基本实现代码:
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 _authResult = '未认证';

  Future<void> _authenticate() async {
    try {
      // 检查设备是否支持生物识别
      final bool canCheckBiometrics = await _localAuth.canCheckBiometrics;
      final List<BiometricType> availableBiometrics = 
          await _localAuth.getAvailableBiometrics();

      if (!canCheckBiometrics || availableBiometrics.isEmpty) {
        setState(() => _authResult = '设备不支持指纹认证');
        return;
      }

      // 执行认证
      final bool didAuthenticate = await _localAuth.authenticate(
        localizedReason: '请验证指纹以继续',
        options: const AuthenticationOptions(
          biometricOnly: true, // 仅使用生物识别
          useErrorDialogs: true, // 显示系统错误对话框
        ),
      );

      setState(() {
        _authResult = didAuthenticate ? '认证成功' : '认证失败';
      });
    } catch (e) {
      setState(() => _authResult = '认证出错: ${e.toString()}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('指纹认证')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _authenticate,
              child: Text('指纹认证'),
            ),
            SizedBox(height: 20),
            Text('认证结果: $_authResult'),
          ],
        ),
      ),
    );
  }
}
  1. 需要添加的Android配置: 在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
  1. iOS配置: 在Info.plist中添加:
<key>NSFaceIDUsageDescription</key>
<string>我们需要验证您的指纹以保护您的数据安全</string>

注意:实际设备测试时需要真机,模拟器可能无法正常工作。

回到顶部