@@ -8,6 +8,7 @@ import '../generated/l10n/zulip_localizations.dart';
88import '../log.dart' ;
99import '../model/actions.dart' ;
1010import '../model/localizations.dart' ;
11+ import '../model/settings.dart' ;
1112import '../model/store.dart' ;
1213import '../notifications/open.dart' ;
1314import 'about_zulip.dart' ;
@@ -254,6 +255,7 @@ class _ZulipAppState extends State<ZulipApp> with WidgetsBindingObserver {
254255 if (widget.navigatorObservers != null )
255256 ...widget.navigatorObservers! ,
256257 _PreventEmptyStack (),
258+ _UpdateLastVisitedAccount (GlobalStoreWidget .settingsOf (context)),
257259 ],
258260 builder: (BuildContext context, Widget ? child) {
259261 if (! ZulipApp .ready.value) {
@@ -305,6 +307,39 @@ class _PreventEmptyStack extends NavigatorObserver {
305307 }
306308}
307309
310+ class _UpdateLastVisitedAccount extends NavigatorObserver {
311+ _UpdateLastVisitedAccount (this .globalSettings);
312+
313+ final GlobalSettingsStore globalSettings;
314+
315+ void _changeLastVisitedAccountIfNecessary (Route <dynamic >? route) {
316+ final old = globalSettings.getInt (IntGlobalSetting .lastVisitedAccountId);
317+ if (route case AccountPageRouteMixin (accountId: var new_) when new_ != old) {
318+ globalSettings.setInt (IntGlobalSetting .lastVisitedAccountId, new_);
319+ }
320+ }
321+
322+ @override
323+ void didPush (Route <void > route, Route <void >? previousRoute) {
324+ _changeLastVisitedAccountIfNecessary (route);
325+ }
326+
327+ @override
328+ void didPop (Route <void > route, Route <void >? previousRoute) {
329+ _changeLastVisitedAccountIfNecessary (previousRoute);
330+ }
331+
332+ @override
333+ void didRemove (Route <void > route, Route <void >? previousRoute) {
334+ _changeLastVisitedAccountIfNecessary (previousRoute);
335+ }
336+
337+ @override
338+ void didReplace ({Route <void >? newRoute, Route <void >? oldRoute}) {
339+ _changeLastVisitedAccountIfNecessary (newRoute);
340+ }
341+ }
342+
308343class ChooseAccountPage extends StatelessWidget {
309344 const ChooseAccountPage ({super .key});
310345
@@ -337,7 +372,13 @@ class ChooseAccountPage extends StatelessWidget {
337372 if (await dialog.result == true ) {
338373 if (! context.mounted) return ;
339374 // TODO error handling if db write fails?
340- unawaited (logOutAccount (GlobalStoreWidget .of (context), accountId));
375+ unawaited (Future (() async {
376+ if (! context.mounted) return ;
377+ await logOutAccount (GlobalStoreWidget .of (context), accountId);
378+ if (! context.mounted) return ;
379+ await removeLastVisitedAccountIfNecessary (
380+ GlobalStoreWidget .of (context), accountId);
381+ }));
341382 }
342383 },
343384 child: Text (zulipLocalizations.chooseAccountPageLogOutButton)),
0 commit comments