Flutter生物识别认证插件biometricx的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter生物识别认证插件biometricx的使用

简介

BiometricX 是一个用于在Flutter应用中实现生物识别认证的插件,支持指纹、FaceID和虹膜识别。以下是该插件的基本使用方法和示例代码。

安装插件

首先,在你的 pubspec.yaml 文件中添加 BiometricX 依赖:

dependencies:
  flutter:
    sdk: flutter
  biometricx: ^版本号

然后运行以下命令安装插件:

$ flutter pub add biometricx

配置

对于 Android 平台,需要将 MainActivity 修改为继承自 FlutterFragmentActivity

Kotlin 示例

import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity: FlutterFragmentActivity() {
  // ...
}

Java 示例

import io.flutter.embedding.android.FlutterFragmentActivity;

class MainActivity extends FlutterFragmentActivity {
  // ...
}

使用方法

检查设备的生物识别类型

可以通过以下代码获取设备的生物识别类型:

BiometricType type = await BiometricX.type;

生物识别类型的枚举值包括:

BiometricType.FACE
BiometricType.FINGERPRINT
BiometricType.IRIS
BiometricType.MULTIPLE
BiometricType.NONE
BiometricType.NO_HARDWARE
BiometricType.UNAVAILABLE
BiometricType.UNSUPPORTED

检查设备是否支持生物识别认证

bool isBiometricEnabled = await BiometricX.isEnabled;

加密数据

使用生物识别认证加密数据:

BiometricResult result = await BiometricX.encrypt({
  'biometricKey': 'salkuadrat',
  'message': 'This is a very secret message',
});

if (result.isSuccess && result.hasData) {
  String messageKey = result.data!;
} else {
  showToast(result.errorMsg, context: context);
}

如果需要持久化的 messageKey,可以这样设置:

BiometricResult result = await BiometricX.encrypt({
  'biometricKey': 'salkuadrat',
  'messageKey': 'secret_message', 
  'message': 'This is a very secret message',
});

if (result.isSuccess && result.hasData) {
  String messageKey = result.data!;
} else {
  showToast(result.errorMsg, context: context);
}

解密数据

解密数据时需要使用相同的 biometricKeymessageKey

BiometricResult result = await BiometricX.decrypt({
  'biometricKey': 'salkuadrat',
  'messageKey': messageKey,
});

if (result.isSuccess && result.hasData) {
  String message = result.data!;
} else {
  showToast(result.errorMsg, context: context);
}

自定义提示信息

可以通过参数自定义生物识别提示对话框:

BiometricResult result = await BiometricX.encrypt({
  'biometricKey': 'salkuadrat',
  'message': 'This is a very secret message',
  'title': 'Biometric Encryption',
  'subtitle': 'Enter biometric credentials to encrypt your message',
  'description': 'Scan fingerprint or face.',
  'negativeButtonText': 'USE PASSWORD',
  'confirmationRequired': true,
});

示例项目

以下是一个完整的示例项目,展示如何使用 BiometricX 插件:

主文件 main.dart

import 'package:flutter/material.dart';
import 'package:get_storage/get_storage.dart';
import 'package:provider/provider.dart';

void main() async {
  await GetStorage.init();
  runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider(create: (_) => AppState()),
      ChangeNotifierProvider(create: (_) => MessagesState()),
    ],
    child: App(),
  ));
}

class App extends StatelessWidget {
  const App({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        brightness: Brightness.light,
      ),
      darkTheme: ThemeData(
        brightness: Brightness.dark,
      ),
      themeMode: ThemeMode.dark,
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Consumer<AppState>(
      builder: (_, app, __) => WillPopScope(
        onWillPop: () {
          if (app.isWrite || app.isRead) {
            app.showList();
            return Future.value(false);
          }

          return Future.value(true);
        },
        child: Scaffold(
          appBar: AppBar(
            title: Text('BiometricX'),
            centerTitle: true,
          ),
          body: Builder(
            builder: (_) {
              if (app.isWrite) return WriteMessage();
              if (app.isRead) return ReadMessage(app.currentMessage);
              return MessageList();
            },
          ),
          floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
          floatingActionButton: app.isList
              ? FloatingActionButton(
                  child: Icon(Icons.add_rounded),
                  onPressed: app.write,
                )
              : null,
        ),
      ),
    );
  }
}

更多关于Flutter生物识别认证插件biometricx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter生物识别认证插件biometricx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用biometricx插件来实现生物识别认证的示例代码。biometricx插件支持Face ID、Touch ID等多种生物识别方式,并且提供了相对简洁的API来进行认证。

首先,确保你已经在pubspec.yaml文件中添加了biometricx依赖:

dependencies:
  flutter:
    sdk: flutter
  biometricx: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中实现生物识别认证。以下是一个简单的示例,展示如何在按钮点击时触发生物识别认证:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Biometric Authentication',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final Biometricx _biometricx = Biometricx();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Biometric Authentication'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _authenticate,
          child: Text('Authenticate'),
        ),
      ),
    );
  }

  Future<void> _authenticate() async {
    try {
      // 请求生物识别认证
      bool authenticated = await _biometricx.authenticate(
        context: context,
        title: 'Authenticate',
        subTitle: 'Please authenticate to continue',
        cancelButtonText: 'Cancel',
        authenticationEnabled: true,
        biometricOnly: true, // 仅使用生物识别,不使用PIN/密码
        stickyAuth: true, // 如果认证失败,保持认证界面打开,允许用户重试
      );

      if (authenticated) {
        // 认证成功
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Authenticated successfully!')),
        );
      } else {
        // 认证取消或失败
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Authentication cancelled or failed.')),
        );
      }
    } catch (e) {
      // 处理异常
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error: ${e.message}')),
      );
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,会触发生物识别认证流程。如果认证成功,会显示一个成功的SnackBar;如果认证失败或取消,会显示一个失败的SnackBar。

请注意,biometricx插件提供了多个配置选项,如authenticationEnabledbiometricOnlystickyAuth,可以根据你的需求进行调整。

此外,确保在实际应用中处理可能的异常情况,例如设备不支持生物识别或用户未设置生物识别方式等。这些异常可以在catch块中进行处理。

回到顶部