Я хочу показать страницу аутентификации Authpage () в моем случае после возобновления приложения из минимизированного состояния, я использую WidgetsBindingObserver PrettyPrint-Override ">class _MainAppState extends State with WidgetsBindingObserver {
bool showAuthPage = false;
bool _isNativeAuthDialogOpen = false;
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.inactive) {
_isNativeAuthDialogOpen = true;
} else if (state == AppLifecycleState.resumed) {
if (_isNativeAuthDialogOpen) {
_isNativeAuthDialogOpen = false;
} else {
setState(() {
showAuthPage = true;
});
}
}
}
...
...
MaterialApp(
home: showAuthPage
? AuthPage(
onAuthCompleted: () {
setState(() {
showAuthPage = false;
});
},
)
: SplashPage(),
)
проблема заключалась в том, что когда было открыто диалоговое окно встроенной аутентификации Android, приложение переходило в фоновый/свернутый режим, а когда пользователь проходил аутентификацию, оно возобновлялось.
class AuthPage extends StatefulWidget {
final VoidCallback onAuthCompleted;
const AuthPage({super.key, required this.onAuthCompleted});
.
.
.
final LocalAuthentication auth = sl();
bool authSuccess = false;
Future didAuthenticate() async {
return await auth.authenticate(localizedReason: ' ');
}
@override
void initState() {
super.initState();
didAuthenticate().then(
(authenticated) {
if (authenticated && mounted) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => const PasswordsPage(),
),
(route) => false,
);
setState(() {
authSuccess = true;
});
}
},
);
}
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return Scaffold(
.
.
.
IconButton.outline(
onPressed: () {
didAuthenticate().then(
(authenticated) {
if (authenticated && mounted) {
widget.onAuthCompleted();
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => const PasswordsPage(),
),
(route) => false,
);
setState(() {
authSuccess = true;
});
}
},
);
},
),
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... mized-mode