@@ -8,6 +8,7 @@ import '../generated/l10n/zulip_localizations.dart';
8
8
import '../log.dart' ;
9
9
import '../model/actions.dart' ;
10
10
import '../model/localizations.dart' ;
11
+ import '../model/settings.dart' ;
11
12
import '../model/store.dart' ;
12
13
import '../notifications/open.dart' ;
13
14
import 'about_zulip.dart' ;
@@ -254,6 +255,7 @@ class _ZulipAppState extends State<ZulipApp> with WidgetsBindingObserver {
254
255
if (widget.navigatorObservers != null )
255
256
...widget.navigatorObservers! ,
256
257
_PreventEmptyStack (),
258
+ _UpdateLastVisitedAccount (GlobalStoreWidget .settingsOf (context)),
257
259
],
258
260
builder: (BuildContext context, Widget ? child) {
259
261
if (! ZulipApp .ready.value) {
@@ -305,6 +307,39 @@ class _PreventEmptyStack extends NavigatorObserver {
305
307
}
306
308
}
307
309
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
+
308
343
class ChooseAccountPage extends StatelessWidget {
309
344
const ChooseAccountPage ({super .key});
310
345
@@ -337,7 +372,13 @@ class ChooseAccountPage extends StatelessWidget {
337
372
if (await dialog.result == true ) {
338
373
if (! context.mounted) return ;
339
374
// 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
+ }));
341
382
}
342
383
},
343
384
child: Text (zulipLocalizations.chooseAccountPageLogOutButton)),
0 commit comments