flutter_lock_screen
此包为您提供了漂亮的密码页,可用于 Android 和 iOS。

指纹使用
首先,您应该确保将 local_auth 包添加为依赖项。
https://pub.dartlang.org/packages/local_auth
iOS 集成
请注意,此插件同时支持 TouchID 和 FaceID。但是,要使用后者,您还需要添加
<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>
到您的 Info.plist 文件中。否则,将显示一个对话框,告知用户您的应用尚未更新为使用 TouchID。
Android 集成
更新您项目的 AndroidManifest.xml 文件以包含 USE_FINGERPRINT 权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<manifest>
用法
使用起来非常简单!
您应该确保将 flutter_lock_screen 添加为 Flutter 项目的依赖项。
dependencies:
flutter_lock_screen: '^1.0.5'
然后,您可以使用以下示例:
import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';
import 'package:testapp/empty_page.dart';
import 'package:flutter/services.dart';
class PassCodeScreen extends StatefulWidget {
PassCodeScreen({Key key, this.title}) : super(key: key);
final String title;
@override
_PassCodeScreenState createState() => new _PassCodeScreenState();
}
class _PassCodeScreenState extends State<PassCodeScreen> {
bool isFingerprint;
Future<Null> biometrics() async {
final LocalAuthentication auth = new LocalAuthentication();
bool authenticated = false;
try {
authenticated = await auth.authenticateWithBiometrics(
localizedReason: 'Scan your fingerprint to authenticate',
useErrorDialogs: true,
stickyAuth: false);
} on PlatformException catch (e) {
print(e);
}
if (!mounted) return;
if (authenticated) {
setState(() {
isFingerprint = true;
});
}
}
@override
Widget build(BuildContext context) {
var myPass = [1, 2, 3, 4];
return LockScreen(
title: "This is Screet ",
passLength: myPass.length,
bgImage: "images/pass_code_bg.jpg",
fingerPrintImage: "images/fingerprint.png",
showFingerPass: true,
fingerFunction: biometrics,
fingerVerify: isFingerprint,
borderColor: Colors.white,
showWrongPassDialog: true,
wrongPassContent: "Wrong pass please try again.",
wrongPassTitle: "Opps!",
wrongPassCancelButtonText: "Cancel",
passCodeVerify: (passcode) async {
for (int i = 0; i < myPass.length; i++) {
if (passcode[i] != myPass[i]) {
return false;
}
}
return true;
},
onSuccess: () {
Navigator.of(context).pushReplacement(
new MaterialPageRoute(builder: (BuildContext context) {
return EmptyPage();
}));
});
}
}