Я прошу, чтобы пользователь был идентифицирован по отпечатку пальца, и все в порядке, если он касается правым пальцем, но если коснуться не тем пальцем, функция не возвращает ничего и не исключение
Future<bool> _authenticate(BuildContext context) async {
bool authenticated = false;
try {
IOSAuthMessages iosStrings = IOSAuthMessages(
cancelButton: AppLocalizations.getString(context, 'cancel'),
goToSettingsButton: AppLocalizations.getString(context, 'settings'),
goToSettingsDescription: "אין טביעות אצבע רשומות במכשירך.\nעבור ל'הגדרות > אבטחה' בכדי להוסיף עכשיו.",
lockOut: 'הפעל מחדש את את זיהוי טביעת האצבע שלך.',
);
AndroidAuthMessages androidStrings = AndroidAuthMessages(
signInTitle: "הזדהות עם טביעת אצבע",
fingerprintHint: "",//"""הנח את האצבע על חיישן ההזדהות",
fingerprintNotRecognized: "לא זוהה",
fingerprintSuccess: "טביעת האצבע זוהתה בהצלחה",
fingerprintRequiredTitle: "נדרשת טביעת אצבע רשומה",
goToSettingsDescription: "אין טביעות אצבע רשומות במכשירך.\nעבור ל'הגדרות > אבטחה' בכדי להוסיף עכשיו.",
goToSettingsButton: AppLocalizations.getString(context, 'settings'),
cancelButton: AppLocalizations.getString(context, 'cancel'),
);
authenticated = await _localAuth.authenticateWithBiometrics(
localizedReason: '',
useErrorDialogs: true,
stickyAuth: true,
iOSAuthStrings: iosStrings,
androidAuthStrings: androidStrings,
);
}
on PlatformException catch (e) {
print('[SecurityPage PlatformException]: $e');
}
catch(e) {
print('[SecurityPage]: $e');
}
print(authenticated);
if(!authenticated) _authTries++;
return authenticated;
}
Future _showAuthDialog({bool canClose = true, Widget icon, Widget text}) => showGeneralDialog(
context: context,
pageBuilder: (context, animation1, animation2) => Container(),
barrierDismissible: false,
barrierColor: Colors.black.withOpacity(0.5),
transitionDuration: Duration(milliseconds: 200),
transitionBuilder: (context, a1, a2, widget) => WillPopScope(
onWillPop: () async => false,
child: Transform(
transform: Matrix4.translationValues(0.0, (Curves.fastOutSlowIn.transform(a1.value) - 1.0) * 200, 0.0),
child: Opacity(
opacity: a1.value,
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Material(
color: Colors.transparent,
child: Container(
margin: EdgeInsets.symmetric(horizontal: 25),
padding: EdgeInsets.only(left: 15, right: 15, top: 10, bottom: 20),
color: AppThemes.getAppBarColor(context),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
if(canClose) Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
IconButton(
icon: Icon(Icons.close, color: AppThemes.getTextColor(context), size: 24,),
onPressed: () async {
_localAuth.stopAuthentication();
Navigator.pop(context);
},
),
],
),
icon ?? Icon(Icons.fingerprint, color: AppSettings.colorPrimary, size: 64,),
SizedBox(height: 15,),
Text(
'הזדהות עם טביעת אצבע',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: AppThemes.getTextColor(context),
),
),
SizedBox(height: 5,),
Padding(
padding: EdgeInsets.symmetric(horizontal: 15),
child: Divider(color: Colors.grey,),
),
SizedBox(height: 5,),
text ?? Text(
'הנח את האצבע על חיישן ההזדהות',
style: TextStyle(
fontSize: 14,
color: AppThemes.getTextColor(context),
),
),
],
),
),
),
],
),
),
),
),
);
Future<void> _doAuth(BuildContext context) async {
if(AppSettings.canUseFingerprint && AppSettings.lockMode == AppLockMode.fingerprint) {
_showAuthDialog();
setState(() {
_firstTimeAuth = true;
});
var auth = await _authenticate(context);
if(auth != null && auth) {
Navigator.pop(context); // Close AuthDialog
_showAuthDialog(
canClose: false,
icon: Icon(Icons.fingerprint, color: Colors.green, size: 64,),
text: Text('טביעת האצבע זוהתה בהצלחה', style: TextStyle(fontSize: 14, color: AppThemes.getTextColor(context),),),
);
Future.delayed(Duration(seconds: 2), () {
Navigator.pop(context); // Close AuthDialog
if(widget.firstAuth == false) {
Navigator.pop(context, true);
}
else {
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => SplashScreenPage(),),);
}
});
}
else {
if (_authTries >= 3) {
await _localAuth.stopAuthentication();
}
}
}
}
Я имею застрял на нем в течение нескольких дней без решения и протестирован на некоторых Android устройствах (OP 7T и MI9T)
Я отмечаю, что использую старую версию, поскольку в обновленной версии есть отпечаток пальца проблема исчезновения с экрана, если вы указали не тем пальцем и у вас по-прежнему та же проблема, о которой я упоминал в обновленной версии