checkVersion method

  1. @override
Future<VersionStatus?> checkVersion(
  1. PackageInfo packageInfo
)
override

Implementation

@override
Future<VersionStatus?> checkVersion(PackageInfo packageInfo) async {
  // If using new API format, convert VersionCheckResponse to VersionStatus
  if (useNewApiFormat) {
    try {
      final response = await checkVersionWithResponse(packageInfo);
      if (response == null) return null;

      return VersionStatus(
        localVersion: packageInfo.version,
        storeVersion: response.versionCode ?? packageInfo.version,
        appStoreLink: response.appStoreLink ?? '',
        releaseNotes: response.releaseNotes,
        forceUpdate: response.isForceUpdate,
      );
    } catch (e) {
      // If new API fails, return null (no update available)
      return null;
    }
  }

  // Legacy API format (backward compatibility)
  if (legacyApiUrl == null) {
    throw Exception('Legacy API URL is required when useNewApiFormat=false');
  }

  final response = await http.get(
    legacyApiUrl!,
    headers: {
      'X-App-Version': packageInfo.version,
      'X-Platform': _getPlatform(),
      ...?additionalHeaders,
    },
  );

  if (response.statusCode != 200) {
    throw HttpException('HTTP error: ${response.statusCode}');
  }

  final latestVersion = response.headers['x-latest-app-version'];
  final forceUpdate =
      response.headers['x-force-update']?.toLowerCase() == 'true';
  final note = response.headers['x-release-notes'];
  final storeUrl = response.headers['x-store-url'];

  if (latestVersion == null) {
    throw Exception('Header "x-latest-app-version" missing in response');
  }

  if (_compareVersions(packageInfo.version, latestVersion) >= 0) {
    // Already up to date
    return null;
  }

  return VersionStatus(
    localVersion: packageInfo.version,
    storeVersion: latestVersion,
    appStoreLink: storeUrl ?? '',
    releaseNotes: note,
    forceUpdate: forceUpdate,
  );
}