onufitness_mobile/lib/services/update_service/app_update_service.dart
2026-06-29 12:28:16 +05:30

116 lines
3.4 KiB
Dart

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<void> 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);
}
}