import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../services/logger_service.dart'; class WhatsNewService { static const String _lastVersionKey = 'last_known_version'; /// Vérifie si le popup "Nouveautés" doit être affiché. /// /// Retourne true si: /// - Ce n'est PAS une nouvelle installation /// - ET la version actuelle est plus récente que la version stockée Future shouldShowWhatsNew() async { try { final prefs = await SharedPreferences.getInstance(); final packageInfo = await PackageInfo.fromPlatform(); final currentVersion = packageInfo.version; final lastVersion = prefs.getString(_lastVersionKey); LoggerService.info( 'WhatsNewService: Current=$currentVersion, Last=$lastVersion', ); // Cas 1: Première installation (lastVersion est null) if (lastVersion == null) { // On sauvegarde la version actuelle pour ne pas afficher le popup // la prochaine fois, et on retourne false maintenant. await prefs.setString(_lastVersionKey, currentVersion); LoggerService.info( 'WhatsNewService: Fresh install detected. Marking version $currentVersion as read.', ); return false; } // Cas 2: Mise à jour (lastVersion != currentVersion) if (lastVersion != currentVersion) { // C'est une mise à jour, on doit afficher le popup. // On NE met PAS à jour la version ici, on attend que l'utilisateur ait vu le popup. LoggerService.info( 'WhatsNewService: Update detected ($lastVersion -> $currentVersion). Showing popup.', ); return true; } // Cas 3: Même version return false; } catch (e) { LoggerService.error('WhatsNewService: Error checking version: $e'); return false; } } /// Marque la version actuelle comme "Vue". /// À appeler quand l'utilisateur ferme le popup. Future markCurrentVersionAsSeen() async { try { final prefs = await SharedPreferences.getInstance(); final packageInfo = await PackageInfo.fromPlatform(); await prefs.setString(_lastVersionKey, packageInfo.version); LoggerService.info( 'WhatsNewService: Version ${packageInfo.version} marked as seen.', ); } catch (e) { LoggerService.error('WhatsNewService: Error marking seen: $e'); } } }