我在以某种方式实现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/

10-11 03:50