checkForUpdate method

Future<UpdateCheckResult> checkForUpdate()

Check the latest published version on pub.dev.

Returns an UpdateCheckResult with version comparison info.

Implementation

Future<UpdateCheckResult> checkForUpdate() async {
  final url = '$apiBaseUrl/api/packages/$packageName';

  try {
    final body = await _doFetchJson(url);

    final json = jsonDecode(body) as Map<String, dynamic>;

    final latest = _extractLatestVersion(json);
    if (latest == null) {
      return UpdateCheckResult(
        currentVersion: currentVersion,
        updateAvailable: false,
        message: 'Could not parse latest version from pub.dev response.',
      );
    }

    final available = _isNewer(currentVersion, latest);
    final msg = available
        ? 'Update available: $currentVersion → $latest'
        : 'Already on the latest version.';

    return UpdateCheckResult(
      currentVersion: currentVersion,
      latestVersion: latest,
      updateAvailable: available,
      message: msg,
    );
  } on SocketException {
    return UpdateCheckResult(
      currentVersion: currentVersion,
      updateAvailable: false,
      message:
          'Network error: Could not reach $apiBaseUrl. '
          'Check your internet connection.',
    );
  } on FormatException catch (e) {
    return UpdateCheckResult(
      currentVersion: currentVersion,
      updateAvailable: false,
      message: 'Failed to parse pub.dev response: $e',
    );
  } catch (e) {
    return UpdateCheckResult(
      currentVersion: currentVersion,
      updateAvailable: false,
      message: 'Unexpected error checking for update: $e',
    );
  }
}