我在以某种方式实现TouchID / FaceID身份验证时遇到问题,它会在用户打开应用程序时自动提示用户。我正在为TouchID / FaceID使用local_auth依赖项。
在下面的代码中,生物识别身份验证将在应用恢复时弹出,但也无法将其关闭。如果按下主屏幕按钮,则它会消除TouchID提示,但立即开始重试,如果继续尝试,则会导致无限循环。它还会随机提示两次,因此,即使您使用第一个TouchID提示成功登录,它也会在之后立即再次弹出。有人知道解决此问题的方法吗?我在登录页面上还有一个TouchID按钮,用户可以按该按钮手动提示TouchID,但是我很想重新创建银行应用程序和其他应用程序的工作方式,当您自动打开应用程序时,TouchID会在提示时显示这些应用程序。
void initState() {
super.initState();
SystemChannels.lifecycle.setMessageHandler((msg) async {
if (msg==AppLifecycleState.resumed.toString()) {
// If can pop, app is not at login screen
// so don't prompt for authentication
if (!Navigator.canPop(context)) {
if (_useFingerprint) {
SharedPreferences prefs = await SharedPreferences.getInstance();
String password = prefs.getString('password');
biometricAuthentication(_username, password);
}
}
}
});
void biometricAuthentication(String user, String pass) async {
print("Biometric Authentication Called");
bool didAuthenticate = false;
try {
didAuthenticate = await localAuth.authenticateWithBiometrics(localizedReason: 'Please authenticate');
} on PlatformException catch (e) {
print(e);
}
if (!mounted) {
return;
}
if (!didAuthenticate) {
return;
}
else {
normalLogin(user, pass);
}
}
最佳答案
这对我有用
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
if (await _isBiometricAvailable()) {
await _getListOfBiometricTypes();
await _authenticateUser();
}
runApp(App());
}
关于dart - Flutter-打开应用程序时提示输入TouchID/FaceID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53069770/