Flutter教程指纹认证功能的实现
在Flutter中实现指纹认证功能时,调用本地生物识别API总是返回"NotAvailable"错误,但手机明明支持指纹解锁。是否必须在AndroidManifest.xml或Info.plist中额外配置权限?具体需要哪些依赖包?
另外,如何处理用户禁用系统指纹后的回调?官方文档提到的local_auth插件示例只展示了认证成功流程,但实际测试发现,当连续3次验证失败时,App会直接闪退,如何捕获这种异常并提示用户?
不同Android/iOS机型对指纹/面部识别的支持差异较大,是否有兼容性处理的通用方案?比如某些华为设备调用指纹API时要求先验证锁屏密码,这种情况该如何适配?
实现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
插件,步骤如下:
-
添加依赖:在
pubspec.yaml
中加入local_auth: ^2.1.0
。 -
初始化权限:在Android的
AndroidManifest.xml
添加:<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
-
编写代码:导入插件并检查设备是否支持指纹识别。
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; }
-
请求指纹认证:
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('认证失败'); } }
-
运行测试:在支持指纹的设备上运行应用,调用
_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>
注意:指纹认证功能需要设备支持并已设置指纹,实际使用时应处理各种异常情况。