Flutter硬件交互插件mantra_mfs100的使用

Flutter硬件交互插件mantra_mfs100的使用

它支持大部分Mantra MFS 100 SDK。

特性

  1. 指纹捕获
  2. 使用ISO模板进行指纹匹配

重要信息

重要提示: Mantra MFS 100 SDK的.jar文件和其他库文件是必须的,以便使用此插件。您可以从示例部分获取.jar文件和库文件。别忘了检查app级别的gradle文件以更好地理解这一点。

完整示例代码

以下是使用mantra_mfs100插件的基本示例代码:

import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:mantra_mfs100/mantra_mfs100.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with MSF100Event {

  String _platformVersion = 'Unknown';

  late MantraMfs100 mfs;

  String status = 'Disconnected';

  bool _isCapturing = false;

  Uint8List? memoryImage;

  List<int> firstTemplate = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    mfs = MantraMfs100(this);
    mfs.init();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              const Text('MFS100'),
              Text(status),
            ],
          ),
        ),
        body: Center(
          child: Column(
            children: [
              // 显示捕获到的指纹图像
              memoryImage != null
                  ? Image.memory(memoryImage!, height: 128, width: 128)
                  : const SizedBox(),

              const SizedBox(height: 20),

              // 捕获指纹按钮
              TextButton(
                  onPressed: () async {
                    try {
                      if (_isCapturing) return;
                      _isCapturing = true;
                      FingerData res = await mfs.startAutoCapture(6000, true);

                      firstTemplate.clear();
                      firstTemplate.addAll(res.iSOTemplate);

                      setState(() {
                        _platformVersion = 'Success ${res.quality}';
                        memoryImage = Uint8List.fromList(res.fingerImage);
                        debugPrint('onCapturing-> ${res.iSOTemplate}');
                        print('onCapturing-> Length: ${res.iSOTemplate.length}');
                      });
                    } catch (err, stack) {
                      if (err is PlatformException) {
                        setState(() {
                          _platformVersion = err.message.toString();
                        });
                      }
                      print('While Capturing-> $err, $stack');
                    } finally {
                      _isCapturing = false;
                    }
                  },
                  child: const Text('Capture')),

              const SizedBox(height: 20),

              // 匹配指纹按钮
              TextButton(
                  onPressed: () async {
                    try {
                      if (_isCapturing) return;
                      _isCapturing = true;

                      FingerData res = await mfs.startAutoCapture(6000, true);

                      var ret = await mfs.matchISO(
                          Uint8List.fromList(firstTemplate),
                          Uint8List.fromList(res.iSOTemplate));

                      if (ret < 0) {
                        setState(() {
                          _platformVersion = 'Error: ${mfs.getErrorMsg(ret)}';
                        });
                      } else {
                        if (ret >= 96) {
                          setState(() {
                            _platformVersion = 'Finger matched with score: $ret';
                          });
                        } else {
                          setState(() {
                            _platformVersion = 'Finger not matched, score: $ret';
                          });
                        }
                      }
                    } catch (err, stack) {
                      if (err is PlatformException) {
                        setState(() {
                          _platformVersion = err.message.toString();
                        });
                      }
                      print('While Verifying-> $err, $stack');
                    } finally {
                      _isCapturing = false;
                    }
                  },
                  child: const Text('Match')),

              const SizedBox(height: 20),

              // 停止自动捕获按钮
              TextButton(
                  onPressed: () async {
                    if (!_isCapturing) return;
                    var res = await mfs.stopAutoCapture();
                    _isCapturing = false;
                  },
                  child: const Text('Stop')),

              // 状态显示
              Text('Status: $_platformVersion\n'),
            ],
          ),
        ),
      ),
    );
  }

  // 设备连接时调用的方法
  [@override](/user/override)
  void onDeviceAttached(bool hasPermission) {
    setState(() {
      status = 'Connected';
    });
    print('onDeviceAttached-> $hasPermission');
  }

  // 设备断开连接时调用的方法
  [@override](/user/override)
  void onDeviceDetached() {
    setState(() {
      status = 'Disconnected';
    });
    print('onDeviceDetached: ---');
  }

  [@override](/user/override)
  void onHostCheckFailed(String var1) {}

  // 释放资源时调用的方法
  [@override](/user/override)
  void dispose() {
    mfs.unInit();
    mfs.dispose();
    super.dispose();
  }

  // 测试方法
  test() {
    List<int> first = [1, 2, 3, 4];
    List<int> second = List.filled(first.length, 0);
    List.copyRange(second, 0, first);
    print('New range $second');
  }
}

更多关于Flutter硬件交互插件mantra_mfs100的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter硬件交互插件mantra_mfs100的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mantra_mfs100 是一个用于 Flutter 的插件,用于与 Mantra MFS100 生物识别设备进行交互。Mantra MFS100 是一种指纹扫描仪,通常用于生物识别身份验证、考勤系统等场景。该插件允许 Flutter 应用程序与 MFS100 设备进行通信,以捕获指纹、验证指纹等操作。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 mantra_mfs100 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  mantra_mfs100: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

初始化设备

在使用插件之前,你需要初始化设备。通常,你需要在应用程序启动时进行初始化。

import 'package:mantra_mfs100/mantra_mfs100.dart';

final mantraMfs100 = MantraMfs100();

void initializeDevice() async {
  try {
    await mantraMfs100.init();
    print("Device initialized successfully");
  } catch (e) {
    print("Failed to initialize device: $e");
  }
}

捕获指纹

你可以使用 captureFingerprint 方法来捕获指纹。捕获到的指纹数据可以用于后续的验证或存储。

void captureFingerprint() async {
  try {
    var fingerprintData = await mantraMfs100.captureFingerprint();
    print("Fingerprint captured: $fingerprintData");
  } catch (e) {
    print("Failed to capture fingerprint: $e");
  }
}

验证指纹

你可以使用 verifyFingerprint 方法来验证捕获到的指纹数据是否与已存储的指纹数据匹配。

void verifyFingerprint(List<int> storedFingerprintData) async {
  try {
    var isMatch = await mantraMfs100.verifyFingerprint(storedFingerprintData);
    if (isMatch) {
      print("Fingerprint matched");
    } else {
      print("Fingerprint did not match");
    }
  } catch (e) {
    print("Failed to verify fingerprint: $e");
  }
}

释放设备

在应用程序退出或不再需要与设备交互时,你应该释放设备资源。

void releaseDevice() async {
  try {
    await mantraMfs100.release();
    print("Device released successfully");
  } catch (e) {
    print("Failed to release device: $e");
  }
}

处理错误

在与设备交互时,可能会遇到各种错误,例如设备未连接、初始化失败等。你应该在代码中适当处理这些错误,以确保应用程序的健壮性。

示例代码

以下是一个完整的示例,展示了如何初始化设备、捕获指纹并验证指纹。

import 'package:flutter/material.dart';
import 'package:mantra_mfs100/mantra_mfs100.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 mantraMfs100 = MantraMfs100();
  List<int> storedFingerprintData = []; // 假设这是已存储的指纹数据

  [@override](/user/override)
  void initState() {
    super.initState();
    initializeDevice();
  }

  void initializeDevice() async {
    try {
      await mantraMfs100.init();
      print("Device initialized successfully");
    } catch (e) {
      print("Failed to initialize device: $e");
    }
  }

  void captureFingerprint() async {
    try {
      var fingerprintData = await mantraMfs100.captureFingerprint();
      print("Fingerprint captured: $fingerprintData");
      verifyFingerprint(fingerprintData);
    } catch (e) {
      print("Failed to capture fingerprint: $e");
    }
  }

  void verifyFingerprint(List<int> capturedFingerprintData) async {
    try {
      var isMatch = await mantraMfs100.verifyFingerprint(storedFingerprintData);
      if (isMatch) {
        print("Fingerprint matched");
      } else {
        print("Fingerprint did not match");
      }
    } catch (e) {
      print("Failed to verify fingerprint: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mantra MFS100 Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: captureFingerprint,
          child: Text('Capture Fingerprint'),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    mantraMfs100.release();
    super.dispose();
  }
}
回到顶部