checkVersionUpdate method

Future<VersionUpdateInfo> checkVersionUpdate()

Check if an app update is available

Implementation

Future<VersionUpdateInfo> checkVersionUpdate() async {
  try {
    logv('🔍 Starting version update check...');

    final packageInfo = await AppConfigBase.getPackageInfo();
    final currentVersion = packageInfo.version;

    final requiredVersion = _getRequiredVersion();
    final recommendedVersion = _getRecommendedVersion();

    logv('=== Version Check Details ===');
    logv('📱 Current app version: $currentVersion');
    logv('🔒 Required version: $requiredVersion');
    logv('💡 Recommended version: $recommendedVersion');
    logv(
        '🖥️  Platform: ${kIsWeb ? 'Web' : Platform.isIOS ? 'iOS' : Platform.isAndroid ? 'Android' : 'Unknown'}');

    VersionUpdateType updateType = VersionUpdateType.none;

    // Check if current version meets required minimum
    final isRequiredVersionValid = await appIsVersionValid(requiredVersion);
    logv('✅ Is required version valid: $isRequiredVersionValid');

    if (!isRequiredVersionValid) {
      updateType = VersionUpdateType.required;
      logd('🚨 Required version update needed - app is below minimum required version');
    } else {
      // Check if current version meets recommended minimum
      final isRecommendedVersionValid = await appIsVersionValid(recommendedVersion);
      logv('💭 Is recommended version valid: $isRecommendedVersionValid');

      if (!isRecommendedVersionValid) {
        updateType = VersionUpdateType.recommended;
        logd('📢 Recommended version update available - newer version recommended');
      } else {
        logv('✨ No update needed - app is up to date');
      }
    }

    final updateInfo = VersionUpdateInfo(
      updateType: updateType,
      currentVersion: currentVersion,
      requiredVersion: requiredVersion,
      recommendedVersion: recommendedVersion,
      appStoreUrl: AppConfigBase.appStoreUrl,
    );

    logv('📤 Emitting version update info: ${updateInfo.updateType}');

    // Emit the update info
    _updateStreamController.add(updateInfo);

    logv('🔍 Version update check completed');
    return updateInfo;
  } catch (e) {
    loge('❌ Error checking version update: $e');
    return const VersionUpdateInfo(
      updateType: VersionUpdateType.none,
      currentVersion: '',
      requiredVersion: '',
      recommendedVersion: '',
      appStoreUrl: '',
    );
  }
}