diff --git a/lib/widgets/entry_list.dart b/lib/widgets/entry_list.dart index 9d13f98..68f834f 100644 --- a/lib/widgets/entry_list.dart +++ b/lib/widgets/entry_list.dart @@ -7,6 +7,7 @@ import 'package:keevault/cubit/autofill_cubit.dart'; import 'package:keevault/cubit/entry_cubit.dart'; import 'package:keevault/cubit/filter_cubit.dart'; import 'package:keevault/cubit/sort_cubit.dart'; +import 'package:keevault/logging/logger.dart'; import 'package:keevault/model/entry.dart'; import 'package:keevault/widgets/entry.dart'; import 'package:keevault/widgets/in_app_messenger.dart'; @@ -277,6 +278,10 @@ class EntryListItemWidget extends StatelessWidget { ); }, onClosed: (bool? keepChanges) async { + if (!context.mounted) { + l.e("context not mounted so we can't tidy up or save the entry. Presumably something happened to make the underlying Vault go away, such as autofill save entry screen replacing the main vault."); + return; + } final entryCubit = BlocProvider.of(context); final iam = InAppMessengerWidget.of(context); if ((keepChanges == null || keepChanges) && (entryCubit.state as EntryLoaded).entry.isDirty) { diff --git a/lib/widgets/vault.dart b/lib/widgets/vault.dart index a32df20..847c75f 100644 --- a/lib/widgets/vault.dart +++ b/lib/widgets/vault.dart @@ -121,7 +121,7 @@ class _VaultWidgetState extends State with WidgetsBindingObserver { @override Widget build(BuildContext context) { final str = S.of(context); - return BlocBuilder( + return BlocConsumer( builder: (context, autofillState) { return BlocConsumer( buildWhen: (previous, current) => current is VaultLoaded, @@ -180,6 +180,14 @@ class _VaultWidgetState extends State with WidgetsBindingObserver { } }); }, + listener: (BuildContext context, AutofillState state) { + if (state is AutofillSaving) { + l.d('Popping until top level reached'); + AppConfig.navigatorKey.currentState?.popUntil((r) { + return r.isFirst; + }); + } + }, ); } }