checkVersion method
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.storeUrlToUse ?? '',
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,
);
}