116 lines
3.4 KiB
Dart
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);
|
|
}
|
|
}
|