Мне нужно создать форму входа.После успешного входа пользователя, мне нужно запустить какой-то таймер (например, 3 минуты), поэтому, если у пользователя нет реакции на приложение или другое слово, если состояние приложения флаттера приостановлено, приостановлено или неактивно более 3 минут.приложение перейдет на главную страницу входа.Пока пользователь взаимодействует с приложением, мне нужно отменить таймер, и только мне нужно, чтобы пометить состояние приложения таймера приостановленным, приостановленным или неактивным.Как мне это сделать?
Я пытаюсь реализовать "WidgetsBindingObserver", но, похоже, он работает не так, как я хотел.Если пользователь успешно входит в систему и перемещается в приложении, WidgetsBindingObserver завершается ошибкой (ошибка: объект состояния для виджета, который больше не отображается в дереве виджетов).
Мой вопрос заключается в том, как реализовать жизненный цикл приложения, основанного на временных характеристиках, до тех пор, покапользователь имеет взаимодействие с приложением?Если нет взаимодействия с пользователем, запускается таймер жизненного цикла, и если до его окончания происходит взаимодействие с пользователем, таймер должен быть отменен.
class _MyUserHomePageState extends State<MyUserHomePage> with WidgetsBindingObserver {
AppLifecycleState _appLifecycleState;
@override
void initState() {
_appStatePasue = false;
WidgetsBinding.instance.addObserver(this);
super.initState();
}
// TODO: DID_CHANGE_APP_LIFE_CYCLE
void didChangeAppLifecycleState(AppLifecycleState state) {
setState(() {
_appLifecycleState = state;
if(_appLifecycleState == AppLifecycleState.paused ||
_appLifecycleState == AppLifecycleState.inactive ||
_appLifecycleState == AppLifecycleState.suspending) {
_appStatePasue = true;
print("timer---fired: $_appLifecycleState");
_timer = Timer.periodic(Duration(minutes: 1), _capitalCallback);
print(_appLifecycleState);
} else {
_appStatePasue = false;
}
});
}
// TODO: APP_LIFE_CYCLE__CALLBACK
void _capitalCallback(_timer) {
if(_appStatePasue == true) {
_timer.cancel();
print("return---main---page: $_appLifecycleState");
setState(() {
Navigator.push(
context,
SlideRightRoute(widget: MyApp())
);
});
} else {
_timer.cancel();
print("timer---canceled: $_appLifecycleState");
}
}
@override
void dispose() {
super.dispose();
}
@override
void onDeactivate() {
super.deactivate();
}
@override
Widget build(BuildContext context) {
return new Scaffold (
);
}
}