@@ -66,13 +66,19 @@ class _RecoveryGateState extends ConsumerState<RecoveryGate>
6666 if (recovery.blocksStartup) {
6767 final DraftSnapshot ? candidate = recovery.candidate;
6868 final EditorDocument current = ref.watch (editorDocumentProvider);
69+ final bool currentMeaningful =
70+ current.content.isNotEmpty ||
71+ current.name != kDefaultDocumentName ||
72+ current.boardPath != null ;
6973 if (candidate != null && recovery.status != DraftRecoveryStatus .loading) {
7074 return Scaffold (
7175 body: PopScope (
7276 canPop: false ,
7377 child: RecoveryPanel (
74- currentContent: current.content.isNotEmpty
75- ? current.content
78+ currentContent: currentMeaningful ? current.content : null ,
79+ currentName: currentMeaningful ? current.name : null ,
80+ onKeepCurrent: currentMeaningful
81+ ? controller.continueWithoutRecovery
7682 : null ,
7783 name: candidate.name,
7884 content: candidate.content,
@@ -163,12 +169,30 @@ class _RecoveryGateState extends ConsumerState<RecoveryGate>
163169 runSpacing: 4 ,
164170 crossAxisAlignment: WrapCrossAlignment .center,
165171 children: < Widget > [
166- Text (l10n.recoveryVolatile ),
172+ Text (l10n.recoveryVolatileShort ),
167173 TextButton (
168174 key: kRecoveryRetryKey,
169175 onPressed: () => controller.retry (),
170176 child: Text (l10n.recoveryRetry),
171177 ),
178+ IconButton (
179+ tooltip: l10n.recoveryVolatile,
180+ icon: const Icon (Icons .info_outline),
181+ onPressed: () => showDialog <void >(
182+ context: context,
183+ builder: (BuildContext context) => AlertDialog (
184+ scrollable: true ,
185+ title: Text (l10n.recoveryTitle),
186+ content: Text (l10n.recoveryVolatile),
187+ actions: < Widget > [
188+ TextButton (
189+ onPressed: () => Navigator .of (context).pop (),
190+ child: Text (l10n.recoveryClose),
191+ ),
192+ ],
193+ ),
194+ ),
195+ ),
172196 ],
173197 ),
174198 ),
@@ -195,7 +219,7 @@ class RecoveryStatusBar extends ConsumerWidget {
195219 DraftRecoveryStatus .saved => l10n.recoverySaved,
196220 DraftRecoveryStatus .saving => l10n.recoverySaving,
197221 DraftRecoveryStatus .pending => l10n.recoveryPending,
198- DraftRecoveryStatus .volatile => l10n.recoveryVolatile ,
222+ DraftRecoveryStatus .volatile => l10n.recoveryVolatileShort ,
199223 DraftRecoveryStatus .loading => l10n.recoveryLoading,
200224 DraftRecoveryStatus .decision => l10n.recoveryTitle,
201225 DraftRecoveryStatus .failed =>
@@ -216,31 +240,49 @@ class RecoveryStatusBar extends ConsumerWidget {
216240 spacing: 12 ,
217241 crossAxisAlignment: WrapCrossAlignment .center,
218242 children: < Widget > [
219- Semantics (liveRegion: true , child: Text (label)),
220- TextButton .icon (
221- key: kRecoverySaveKey,
222- onPressed: canSave
223- ? () async {
224- final ScaffoldMessengerState messenger =
225- ScaffoldMessenger .of (context);
226- final bool saved = await ref
227- .read (draftRecoveryProvider.notifier)
228- .saveRecoveryCopy ();
229- if (! messenger.mounted) return ;
230- messenger.showSnackBar (
231- SnackBar (
232- content: Text (
233- saved
234- ? l10n.recoverySavedFeedback
235- : l10n.recoverySaveFailed,
243+ if (recovery.status != DraftRecoveryStatus .volatile)
244+ Semantics (liveRegion: true , child: Text (label)),
245+ if (recovery.status == DraftRecoveryStatus .failed) ...< Widget > [
246+ TextButton (
247+ key: kRecoveryRetryKey,
248+ onPressed: () =>
249+ ref.read (draftRecoveryProvider.notifier).retry (),
250+ child: Text (l10n.recoveryRetry),
251+ ),
252+ TextButton (
253+ key: kRecoveryContinueKey,
254+ onPressed: () => ref
255+ .read (draftRecoveryProvider.notifier)
256+ .continueWithoutRecovery (),
257+ child: Text (l10n.recoveryContinue),
258+ ),
259+ ],
260+ if (recovery.status != DraftRecoveryStatus .volatile &&
261+ recovery.status != DraftRecoveryStatus .failed)
262+ TextButton .icon (
263+ key: kRecoverySaveKey,
264+ onPressed: canSave
265+ ? () async {
266+ final ScaffoldMessengerState messenger =
267+ ScaffoldMessenger .of (context);
268+ final bool saved = await ref
269+ .read (draftRecoveryProvider.notifier)
270+ .saveRecoveryCopy ();
271+ if (! messenger.mounted) return ;
272+ messenger.showSnackBar (
273+ SnackBar (
274+ content: Text (
275+ saved
276+ ? l10n.recoverySavedFeedback
277+ : l10n.recoverySaveFailed,
278+ ),
236279 ),
237- ),
238- );
239- }
240- : null ,
241- icon: const Icon (Icons .save_alt),
242- label: Text (l10n.recoverySave),
243- ),
280+ );
281+ }
282+ : null ,
283+ icon: const Icon (Icons .save_alt),
284+ label: Text (l10n.recoverySave),
285+ ),
244286 TextButton (
245287 onPressed: () => showModalBottomSheet <void >(
246288 context: context,
0 commit comments