Flutter指纹识别插件futronic的使用
Flutter指纹识别插件futronic的使用
该插件用于与Futronic设备进行通信。目前仅在FS80设备上进行了测试。该插件提供了主要功能,例如采集生物特征模板并基于另一个模板验证生物特征。
详细说明:
为了使插件正常工作,需要将FTRAPI.dll
和 ftrScanAPI.dll
这两个DLL文件提取到System32
目录下。
import 'package:flutter/material.dart';
import 'package:futronic/enum/ftr_signal_status.dart';
import 'package:futronic/futronic_enroll_result.dart';
import 'package:futronic/futronic_utils.dart';
import 'package:futronic/futronico.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized(); // 确保Flutter框架已初始化
runApp(const FutronicoExample());
}
class FutronicoExample extends StatelessWidget {
const FutronicoExample({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const FutronicExamplePage(title: 'Futronico 示例'),
);
}
}
class FutronicExamplePage extends StatefulWidget {
const FutronicExamplePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<FutronicExamplePage> createState() => _FutronicExamplePageState();
}
class _FutronicExamplePageState extends State<FutronicExamplePage> {
[@override](/user/override)
void dispose() {
futronico.terminate(); // 释放资源
super.dispose();
}
Futronico futronico = Futronico(); // 初始化Futronico实例
[@override](/user/override)
void initState() {
setListener(); // 设置监听器
super.initState();
}
void setListener() {
Futronico.futronicStatusController.stream.listen((event) { // 监听状态变化
if (event.currentStatus == FTR_SIGNAL_STATUS.touch_sensor) {
setState(() {
textoResultado = "放置手指"; // 显示提示信息
});
}
if (event.currentStatus == FTR_SIGNAL_STATUS.take_off) {
setState(() {
textoResultado = "移开手指"; // 显示提示信息
});
}
});
}
bool hasReceivedSomeBiometry = false; // 是否已经接收过生物特征
String textoResultado = "等待指纹"; // 初始文本
List<int> ultimaDigital = []; // 存储最后采集的指纹数据
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title), // 设置标题
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(textoResultado), // 显示当前状态
TextButton(
onPressed: () {
futronico.cancelOperation(); // 取消操作
},
child: Text("取消读取")),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async { // 按钮点击事件
try {
if (!hasReceivedSomeBiometry) {
FutronicEnrollResult enrollResult = await futronico.enrollTemplate(); // 采集指纹模板
ultimaDigital = enrollResult.enrollTemplate;
setState(() {
textoResultado = "收到指纹,质量为 ${enrollResult.quality}/10"; // 更新文本
});
hasReceivedSomeBiometry = true; // 标记已接收指纹
} else {
bool isTheSame = await futronico.verify(ultimaDigital, far: 0.01); // 验证指纹
setState(() {
textoResultado = isTheSame ? "指纹相同" : "指纹不匹配"; // 更新文本
});
}
} on FutronicError catch (e) {
setState(() {
textoResultado = e.message; // 错误处理
});
}
},
tooltip: 'Increment',
child: const Icon(Icons.add), // 设置图标
),
);
}
}
示例代码
以下是完整的示例代码,展示了如何使用Futronico插件来采集和验证指纹:
import 'package:flutter/material.dart';
import 'package:futronic/enum/ftr_signal_status.dart';
import 'package:futronic/futronic_enroll_result.dart';
import 'package:futronic/futronic_utils.dart';
import 'package:futronic/futronico.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const FutronicoExample());
}
class FutronicoExample extends StatelessWidget {
const FutronicoExample({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const FutronicExamplePage(title: 'Futronico 示例'),
);
}
}
class FutronicExamplePage extends StatefulWidget {
const FutronicExamplePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<FutronicExamplePage> createState() => _FutronicExamplePageState();
}
class _FutronicExamplePageState extends State<FutronicExamplePage> {
[@override](/user/override)
void dispose() {
futronico.terminate();
super.dispose();
}
Futronico futronico = Futronico();
[@override](/user/override)
void initState() {
setListener();
super.initState();
}
void setListener() {
Futronico.futronicStatusController.stream.listen((event) {
if (event.currentStatus == FTR_SIGNAL_STATUS.touch_sensor) {
setState(() {
textoResultado = "放置手指";
});
}
if (event.currentStatus == FTR_SIGNAL_STATUS.take_off) {
setState(() {
textoResultado = "移开手指";
});
}
});
}
bool hasReceivedSomeBiometry = false;
String textoResultado = "等待指纹";
List<int> ultimaDigital = [];
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(textoResultado),
TextButton(
onPressed: () {
futronico.cancelOperation();
},
child: Text("取消读取")),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
try {
if (!hasReceivedSomeBiometry) {
FutronicEnrollResult enrollResult = await futronico.enrollTemplate();
ultimaDigital = enrollResult.enrollTemplate;
setState(() {
textoResultado = "收到指纹,质量为 ${enrollResult.quality}/10";
});
hasReceivedSomeBiometry = true;
} else {
bool isTheSame = await futronico.verify(ultimaDigital, far: 0.01);
setState(() {
textoResultado = isTheSame ? "指纹相同" : "指纹不匹配";
});
}
} on FutronicError catch (e) {
setState(() {
textoResultado = e.message;
});
}
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter指纹识别插件futronic的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter指纹识别插件futronic的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
futronic
是一个用于在 Flutter 应用中实现指纹识别的插件。它允许开发者通过集成指纹扫描硬件来增强应用的安全性。以下是如何在 Flutter 项目中使用 futronic
插件的步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 futronic
插件的依赖。
dependencies:
flutter:
sdk: flutter
futronic: ^1.0.0 # 请使用最新版本
然后,运行 flutter pub get
来获取依赖。
2. 配置 Android 项目
在 Android 项目中,确保你已经启用了指纹识别功能。你需要在 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
3. 初始化插件
在你的 Dart 代码中,首先需要导入 futronic
插件,然后初始化它。
import 'package:futronic/futronic.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: FingerprintScreen(),
);
}
}
class FingerprintScreen extends StatefulWidget {
[@override](/user/override)
_FingerprintScreenState createState() => _FingerprintScreenState();
}
class _FingerprintScreenState extends State<FingerprintScreen> {
final Futronic _futronic = Futronic();
[@override](/user/override)
void initState() {
super.initState();
_initializeFutronic();
}
void _initializeFutronic() async {
bool initialized = await _futronic.initialize();
if (initialized) {
print("Futronic initialized successfully");
} else {
print("Failed to initialize Futronic");
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Fingerprint Authentication'),
),
body: Center(
child: ElevatedButton(
onPressed: _authenticate,
child: Text('Authenticate with Fingerprint'),
),
),
);
}
void _authenticate() async {
bool authenticated = await _futronic.authenticate();
if (authenticated) {
print("Fingerprint authentication successful");
// 认证成功后的操作
} else {
print("Fingerprint authentication failed");
// 认证失败后的操作
}
}
}
4. 处理认证结果
在 _authenticate
方法中,你可以根据 authenticate
方法的返回值来处理认证成功或失败的情况。
5. 释放资源
在使用完 futronic
插件后,记得释放资源以避免内存泄漏。
[@override](/user/override)
void dispose() {
_futronic.dispose();
super.dispose();
}