how to implement in app time out session in flutter
If you need something for the web target then better setup a key-up and a mouse-click listener on your index.html's 'body' as follows.
...<body id = 'myapp-main-content'>...
Then implement the listeners, here is an example borrowed from Task Tracker (https://github.com/botorabi/TaskTracker/tree/master/src/flutter-app/TaskTracker/lib).
import 'dart:async';import 'dart:html';import 'package:TaskTracker/service/authstatus.dart';import 'package:flutter/material.dart';import 'config.dart';import 'navigation.links.dart';import 'service/service.login.dart';/// Logout user after long inactivity period.class SessionTimeoutHandler { static const MAIN_CONTAINER_ID = 'myapp-main-content'; final GlobalKey<NavigatorState> _navigator; Timer _sessionTimer; int _timeoutInSeconds; static DateTime _timeLeft; SessionTimeoutHandler(this._navigator, this._timeoutInSeconds); void installLogoutHandler() { var body = document.getElementById(MAIN_CONTAINER_ID); body.addEventListener("click", (event) => resetLogoutTimer()); body.addEventListener("keyup", (event) => resetLogoutTimer()); resetLogoutTimer(); } /// Return the time left to logout in seconds. /// If user is not authenticated then 0 is returned. static int timeLeftInSeconds() { if ((_timeLeft == null) || !Config.authStatus.authenticated) { return 0; } return ((DateTime.now().millisecondsSinceEpoch - _timeLeft.millisecondsSinceEpoch) / 1000).floor(); } void resetLogoutTimer() { _timeLeft = DateTime.now(); _sessionTimer?.cancel(); _sessionTimer = Timer(Duration(seconds: _timeoutInSeconds), _logout); } void _logout() { if (Config.authStatus.authenticated) { ServiceLogin().logoutUser().then((result) { Config.authStatus = AuthStatus(); _navigator.currentState.pushNamedAndRemoveUntil( NavigationLinks.NAV_HOME, (Route<dynamic> route) => false); }); } }}
Then use the SessionTimeoutHandler above in your main widget setup (see initState below).
class AppTaskTracker extends StatefulWidget { @override _AppTaskTrackerState createState() => _AppTaskTrackerState();}class _AppTaskTrackerState extends State<AppTaskTracker> { final GlobalKey<NavigatorState> _navigator = GlobalKey<NavigatorState>(); @override void initState() { super.initState(); SessionTimeoutHandler(_navigator, Config.LOGOUT_TIMEOUT).installLogoutHandler(); } @override Widget build(BuildContext context) { return MaterialApp( ...
Take into account that SessionTimeoutHandler gets the navigator in order to redirect to home after automatic logout.