loadReleaseNotes method

Future<ReleaseNotes> loadReleaseNotes({
  1. bool forceRefresh = false,
})

Loads release notes for the active update descriptor.

Returns a cached result for the same descriptor unless forceRefresh is true. Loading errors are stored in releaseNotesState and rethrown.

Implementation

Future<ReleaseNotes> loadReleaseNotes({bool forceRefresh = false}) async {
  final descriptor = activeDescriptor;
  if (descriptor == null) {
    throw StateError("No active update descriptor is available.");
  }
  if (_releaseNotesLoader == null && _releaseNotesUrl == null) {
    throw StateError("No release notes loader is configured.");
  }

  final cacheKey = _releaseNotesCacheKey(descriptor);
  final cached = _cachedReleaseNotes;
  if (!forceRefresh && cached != null && _cachedReleaseNotesKey == cacheKey) {
    return cached;
  }

  _releaseNotesState = const ReleaseNotesLoading();
  notifyListeners();

  try {
    final loader = _releaseNotesLoader;
    final notes = loader == null
        ? await _releaseNotesFetcher!.fetch(_releaseNotesUrl!)
        : await loader(descriptor);
    _cachedReleaseNotes = notes;
    _cachedReleaseNotesKey = cacheKey;
    _releaseNotesState = ReleaseNotesLoaded(notes);
    notifyListeners();
    return notes;
  } on Object catch (error) {
    _releaseNotesState = ReleaseNotesFailed(error);
    notifyListeners();
    rethrow;
  }
}