import 'package:get/get.dart'; import 'package:upgrader/upgrader.dart'; import 'package:onufitness/services/logger_service/logger_service.dart'; class AppUpdateController extends GetxController { final logger = LoggerService(); static const String androidAppId = 'com.onufitness.dev'; static const String iosAppId = '6745872339'; static const String playStoreUrl = 'https://play.google.com/store/apps/details?id=$androidAppId'; static const String appStoreUrl = 'https://apps.apple.com/app/id$iosAppId'; late Upgrader upgrader; RxBool isCheckingUpdate = false.obs; @override void onInit() { super.onInit(); initializeUpgrader(); } /// Initialize the upgrader with custom configuration void initializeUpgrader() { upgrader = Upgrader( // Check for updates every 1 day (customize as needed) durationUntilAlertAgain: const Duration(days: 1), // Enable debug logging (set to false in production) debugLogging: true, // Country code for App Store lookup (iOS) countryCode: 'US', // Change to your target country //.................................................................................. // ===== FORCE UPDATE (OPTIONAL) ==================================================== // Uncomment to force users below this version to update // minAppVersion: '1.0.0', //.................................................................................. messages: CustomUpgraderMessages(), ); logger.log('App Update Controller initialized'); logger.log('Android App ID: $androidAppId'); logger.log('iOS App ID: $iosAppId'); } /// Call this if you want to trigger update check programmatically Future checkForUpdate() async { try { isCheckingUpdate.value = true; logger.log('Manually checking for updates...'); await upgrader.initialize(); if (upgrader.isUpdateAvailable()) { final storeVersion = upgrader.currentAppStoreVersion; logger.log('Update available: $storeVersion'); } else { logger.log('App is up to date'); } } catch (e) { logger.error('Error checking for update', error: e); } finally { isCheckingUpdate.value = false; } } /// Get current installed version String get currentVersion { final version = upgrader.currentInstalledVersion; return version ?? 'Unknown'; } /// Get latest available version from store String get latestVersion { final version = upgrader.currentAppStoreVersion; return version ?? 'Unknown'; } /// Check if update is available bool get isUpdateAvailable => upgrader.isUpdateAvailable(); @override void onClose() { logger.log('App Update Controller disposed'); super.onClose(); } } /// Customize these messages to match your app's tone class CustomUpgraderMessages extends UpgraderMessages { @override String get buttonTitleIgnore => 'Skip'; @override String get buttonTitleLater => 'Later'; @override String get buttonTitleUpdate => 'Update Now'; @override String get title => 'Update Available'; /// Override the message method to provide custom body text @override String? message(UpgraderMessage messageKey) { if (messageKey == UpgraderMessage.body) { return 'A new version is available! Update now to get the latest features and improvements.'; } return super.message(messageKey); } }