@@ -254,6 +254,7 @@ class _ZulipAppState extends State<ZulipApp> with WidgetsBindingObserver {
254
254
if (widget.navigatorObservers != null )
255
255
...widget.navigatorObservers! ,
256
256
_PreventEmptyStack (),
257
+ _UpdateLastVisitedAccount (GlobalStoreWidget .of (context)),
257
258
],
258
259
builder: (BuildContext context, Widget ? child) {
259
260
if (! ZulipApp .ready.value) {
@@ -305,6 +306,44 @@ class _PreventEmptyStack extends NavigatorObserver {
305
306
}
306
307
}
307
308
309
+ class _UpdateLastVisitedAccount extends NavigatorObserver {
310
+ _UpdateLastVisitedAccount (this .globalStore);
311
+
312
+ final GlobalStore globalStore;
313
+
314
+ void _changeLastVisitedAccountIfNecessary (Route <dynamic >? route) {
315
+ if (route case AccountPageRouteMixin (accountId: var new_)) {
316
+ final old = globalStore.lastVisitedAccountId;
317
+ switch ((old, new_)) {
318
+ case (null , int _):
319
+ globalStore.insertLastVisitedAccount (new_);
320
+ case (int _, int _) when old != new_:
321
+ globalStore.updateLastVisitedAccount (new_);
322
+ }
323
+ }
324
+ }
325
+
326
+ @override
327
+ void didPush (Route <void > route, Route <void >? previousRoute) {
328
+ _changeLastVisitedAccountIfNecessary (route);
329
+ }
330
+
331
+ @override
332
+ void didPop (Route <void > route, Route <void >? previousRoute) {
333
+ _changeLastVisitedAccountIfNecessary (previousRoute);
334
+ }
335
+
336
+ @override
337
+ void didRemove (Route <void > route, Route <void >? previousRoute) {
338
+ _changeLastVisitedAccountIfNecessary (previousRoute);
339
+ }
340
+
341
+ @override
342
+ void didReplace ({Route <void >? newRoute, Route <void >? oldRoute}) {
343
+ _changeLastVisitedAccountIfNecessary (newRoute);
344
+ }
345
+ }
346
+
308
347
class ChooseAccountPage extends StatelessWidget {
309
348
const ChooseAccountPage ({super .key});
310
349
@@ -337,7 +376,12 @@ class ChooseAccountPage extends StatelessWidget {
337
376
if (await dialog.result == true ) {
338
377
if (! context.mounted) return ;
339
378
// TODO error handling if db write fails?
340
- unawaited (logOutAccount (GlobalStoreWidget .of (context), accountId));
379
+ unawaited (Future (() async {
380
+ if (! context.mounted) return ;
381
+ await logOutAccount (GlobalStoreWidget .of (context), accountId);
382
+ if (! context.mounted) return ;
383
+ await removeLastVisitedAccountIfNecessary (GlobalStoreWidget .of (context), accountId);
384
+ }));
341
385
}
342
386
},
343
387
child: Text (zulipLocalizations.chooseAccountPageLogOutButton)),
0 commit comments