fetchBreakingChanges method

Future<List<Map<String, dynamic>>> fetchBreakingChanges()

Fetch all known Flutter breaking changes from the documentation index.

Returns a list of maps, each containing:

  • title — human-readable title of the breaking change
  • url — relative path or full URL to the detail page
  • version — Flutter version string where the change landed (if extractable from the surrounding heading)

Returns an empty list on failure.

Implementation

Future<List<Map<String, dynamic>>> fetchBreakingChanges() async {
  final cacheKey = 'flutter_breaking_changes';
  final cached = await _cache.get(cacheKey);
  if (cached != null) {
    final entries = cached['entries'] as List<dynamic>? ?? [];
    return entries.cast<Map<String, dynamic>>();
  }

  // Try primary URL first, then the alternative layout.
  String? markdown = await _fetchMarkdown(_breakingChangesUrl);
  markdown ??= await _fetchMarkdown(_breakingChangesUrlAlt);

  if (markdown == null) {
    Logger.warn('Could not fetch Flutter breaking-changes index');
    return [];
  }

  try {
    final entries = _parseBreakingChangesIndex(markdown);
    Logger.info('Parsed ${entries.length} Flutter breaking-change entries');

    await _cache.set(
      cacheKey,
      {'entries': entries},
      CacheManager.flutterDocsTtl,
    );
    return entries;
  } catch (e, stack) {
    Logger.error('Error parsing breaking-changes index', e, stack);
    return [];
  }
}