Flutter - открыть страницу после того, как приложение перейдет в свернутый режимAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Flutter - открыть страницу после того, как приложение перейдет в свернутый режим

Сообщение Anonymous »

Я хочу показать страницу аутентификации 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»