import 'package:flutter/material.dart'; /// Widget de dialogue pour informer l'utilisateur que les données locales ont été réinitialisées /// en raison d'une incompatibilité après une mise à jour de l'application. class HiveResetDialog extends StatelessWidget { /// Callback appelé lorsque l'utilisateur ferme le dialogue final VoidCallback? onClose; const HiveResetDialog({ super.key, this.onClose, }); /// Affiche le dialogue de réinitialisation Hive static Future show(BuildContext context, {VoidCallback? onClose}) async { return showDialog( context: context, barrierDismissible: false, // L'utilisateur doit appuyer sur un bouton pour fermer le dialogue builder: (BuildContext dialogContext) { return HiveResetDialog(onClose: onClose); }, ); } @override Widget build(BuildContext context) { final theme = Theme.of(context); return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), title: Row( children: [ Icon( Icons.sync_problem, color: theme.colorScheme.error, size: 28, ), const SizedBox(width: 12), Text( 'Données réinitialisées', style: theme.textTheme.titleLarge?.copyWith( fontWeight: FontWeight.bold, color: theme.colorScheme.onSurface, ), ), ], ), content: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Suite à une mise à jour de l\'application, vos données locales ont dû être réinitialisées pour assurer la compatibilité.', style: theme.textTheme.bodyLarge, ), const SizedBox(height: 16), Text( 'Que s\'est-il passé ?', style: theme.textTheme.titleMedium?.copyWith( fontWeight: FontWeight.bold, ), ), const SizedBox(height: 8), Text( 'Une incompatibilité a été détectée entre la structure des données de la version précédente et celle de la version actuelle. Pour éviter tout problème, les données locales ont été effacées.', style: theme.textTheme.bodyMedium, ), const SizedBox(height: 16), Text( 'Que dois-je faire ?', style: theme.textTheme.titleMedium?.copyWith( fontWeight: FontWeight.bold, ), ), const SizedBox(height: 8), Text( 'Vous devez vous reconnecter à votre compte pour récupérer vos données depuis le serveur. Toutes vos données seront restaurées automatiquement après la connexion.', style: theme.textTheme.bodyMedium, ), const SizedBox(height: 16), Text( 'Note : Si vous aviez des modifications non synchronisées, elles ont été perdues. Nous vous recommandons de synchroniser régulièrement vos données.', style: theme.textTheme.bodySmall?.copyWith( fontStyle: FontStyle.italic, color: theme.colorScheme.onSurface.withOpacity(0.7), ), ), ], ), ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); if (onClose != null) { onClose!(); } }, style: TextButton.styleFrom( foregroundColor: theme.colorScheme.primary, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), ), child: const Text('J\'ai compris'), ), ], ); } }