Flutter本地认证插件local_auth_windows的使用
Flutter本地认证插件local_auth_windows的使用
描述
local_auth_windows
是 local_auth
的Windows实现。它允许开发者在Flutter应用中利用Windows平台的本地认证功能,如指纹、面部识别等生物特征认证。
使用方法
此插件是推荐使用的(federated plugin),这意味着你可以在你的项目中直接正常使用 local_auth
。当你这样做时,这个包将被自动包含在你的应用程序中,因此你不需要在你的 pubspec.yaml
文件中添加它。然而,如果你要直接导入此包以使用其任何API,则应该像往常一样将其添加到你的 pubspec.yaml
中。
示例代码
下面是一个完整的示例demo,演示了如何在Flutter应用中使用 local_auth_windows
进行设备支持性检查、获取已注册的生物识别信息以及执行身份验证操作。
// 忽略一些警告信息
// ignore_for_file: public_member_api_docs, avoid_print
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:local_auth_platform_interface/local_auth_platform_interface.dart';
import 'package:local_auth_windows/local_auth_windows.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// 定义状态变量
_SupportState _supportState = _SupportState.unknown;
bool? _deviceSupportsBiometrics;
List<BiometricType>? _enrolledBiometrics;
String _authorized = 'Not Authorized';
bool _isAuthenticating = false;
@override
void initState() {
super.initState();
// 检查设备是否支持
LocalAuthPlatform.instance.isDeviceSupported().then(
(bool isSupported) => setState(() => _supportState = isSupported
? _SupportState.supported
: _SupportState.unsupported),
);
}
// 检查设备是否支持生物识别
Future<void> _checkBiometrics() async {
late bool deviceSupportsBiometrics;
try {
deviceSupportsBiometrics =
await LocalAuthPlatform.instance.deviceSupportsBiometrics();
} on PlatformException catch (e) {
deviceSupportsBiometrics = false;
print(e);
}
if (!mounted) {
return;
}
setState(() {
_deviceSupportsBiometrics = deviceSupportsBiometrics;
});
}
// 获取已注册的生物识别类型
Future<void> _getEnrolledBiometrics() async {
late List<BiometricType> availableBiometrics;
try {
availableBiometrics =
await LocalAuthPlatform.instance.getEnrolledBiometrics();
} on PlatformException catch (e) {
availableBiometrics = <BiometricType>[];
print(e);
}
if (!mounted) {
return;
}
setState(() {
_enrolledBiometrics = availableBiometrics;
});
}
// 执行身份验证
Future<void> _authenticate() async {
bool authenticated = false;
try {
setState(() {
_isAuthenticating = true;
_authorized = 'Authenticating';
});
authenticated = await LocalAuthPlatform.instance.authenticate(
localizedReason: 'Let OS determine authentication method',
authMessages: <AuthMessages>[const WindowsAuthMessages()],
options: const AuthenticationOptions(
stickyAuth: true,
),
);
setState(() {
_isAuthenticating = false;
});
} on PlatformException catch (e) {
print(e);
setState(() {
_isAuthenticating = false;
_authorized = 'Error - ${e.message}';
});
return;
}
if (!mounted) {
return;
}
setState(
() => _authorized = authenticated ? 'Authorized' : 'Not Authorized');
}
// 取消正在进行的身份验证
Future<void> _cancelAuthentication() async {
await LocalAuthPlatform.instance.stopAuthentication();
setState(() => _isAuthenticating = false);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: ListView(
padding: const EdgeInsets.only(top: 30),
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (_supportState == _SupportState.unknown)
const CircularProgressIndicator()
else if (_supportState == _SupportState.supported)
const Text('This device is supported')
else
const Text('This device is not supported'),
const Divider(height: 100),
Text(
'Device supports biometrics: $_deviceSupportsBiometrics\n'),
ElevatedButton(
onPressed: _checkBiometrics,
child: const Text('Check biometrics'),
),
const Divider(height: 100),
Text('Enrolled biometrics: $_enrolledBiometrics\n'),
ElevatedButton(
onPressed: _getEnrolledBiometrics,
child: const Text('Get enrolled biometrics'),
),
const Divider(height: 100),
Text('Current State: $_authorized\n'),
if (_isAuthenticating)
ElevatedButton(
onPressed: _cancelAuthentication,
child: const Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text('Cancel Authentication'),
Icon(Icons.cancel),
],
),
)
else
Column(
children: <Widget>[
ElevatedButton(
onPressed: _authenticate,
child: const Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text('Authenticate'),
Icon(Icons.perm_device_information),
],
),
),
],
),
],
),
],
),
),
);
}
}
enum _SupportState {
unknown,
supported,
unsupported,
}
通过这段代码,你可以:
- 检查当前设备是否支持生物识别。
- 获取当前设备上已注册的生物识别类型(如指纹、面部识别等)。
- 执行生物识别身份验证,并处理成功或失败的情况。
- 在认证过程中提供取消认证的功能。
希望这段代码可以帮助您理解并集成 local_auth_windows
插件到您的Flutter项目中。如果有任何问题或需要进一步的帮助,请随时提问!
更多关于Flutter本地认证插件local_auth_windows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地认证插件local_auth_windows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用local_auth_windows
插件来实现本地认证的示例代码。这个插件允许你在Windows平台上使用Windows Hello或其他生物识别方法进行身份验证。
首先,确保你的Flutter项目已经设置好,并且已经添加了local_auth
和local_auth_windows
依赖。
- 在
pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
local_auth: ^1.0.0 # 请检查最新版本号
dev_dependencies:
flutter_test:
sdk: flutter
dependency_overrides:
local_auth_windows:
git:
url: https://github.com/flutter/plugins.git
path: packages/local_auth/local_auth_windows # 使用Git路径,因为可能需要最新未发布的功能
注意:由于local_auth_windows
可能还未正式发布到pub.dev,这里使用了Git路径来引用。如果你发现它已经被发布,可以直接使用版本号而不是Git路径。
- 配置Windows平台:
确保你的windows
文件夹下的CMakeLists.txt
和PluginRegistrant.cmake
文件已经正确设置来支持插件。这通常在使用flutter create .
命令创建Windows项目时自动完成。
- 编写Flutter代码:
下面是一个简单的示例,展示如何使用local_auth
插件进行本地认证:
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: Scaffold(
appBar: AppBar(
title: Text('Local Authentication Example'),
),
body: Center(
child: AuthenticateButton(),
),
),
);
}
}
class AuthenticateButton extends StatefulWidget {
@override
_AuthenticateButtonState createState() => _AuthenticateButtonState();
}
class _AuthenticateButtonState extends State<AuthenticateButton> {
final LocalAuthentication _localAuthentication = LocalAuthentication();
bool _authenticated = false;
Future<void> _authenticate() async {
bool authenticated = false;
try {
authenticated = await _localAuthentication.authenticateWithBiometrics(
localizedReason: 'Please authenticate to continue');
} on PlatformException catch (e) {
print("Failed to authenticate: '${e.message}' (${e.code})");
}
setState(() {
_authenticated = authenticated;
});
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: _authenticate,
child: Text(_authenticated ? 'Authenticated' : 'Authenticate'),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。点击按钮将尝试使用Windows Hello或其他可用的生物识别方法进行身份验证。如果身份验证成功,按钮文本将更改为“Authenticated”。
- 运行应用:
确保你的Flutter开发环境已经设置好,并且你已经连接了一个Windows设备或模拟器。然后运行以下命令来启动应用:
flutter run -d windows
这个命令将在Windows平台上编译并运行你的Flutter应用。
请注意,由于local_auth_windows
插件可能还在开发中,实际使用时可能需要根据最新的文档和API进行调整。此外,确保你的Windows设备支持Windows Hello或其他生物识别方法,并且已经正确配置。