diff --git a/lib/provider/metadata_plugin/utils/family_paginated.dart b/lib/provider/metadata_plugin/utils/family_paginated.dart index ae05368f..07fded4a 100644 --- a/lib/provider/metadata_plugin/utils/family_paginated.dart +++ b/lib/provider/metadata_plugin/utils/family_paginated.dart @@ -12,18 +12,24 @@ abstract class FamilyPaginatedAsyncNotifier Future fetchMore() async { if (state.value == null || !state.value!.hasMore) return; - state = AsyncLoadingNext(state.asData!.value); + final oldState = state.value; - final newState = await fetch( - state.value!.nextOffset!, - state.value!.limit, - ); + try { + state = AsyncLoadingNext(state.asData!.value); - final oldItems = - state.value!.items.isEmpty ? [] : state.value!.items.cast(); - final items = newState.items.isEmpty ? [] : newState.items.cast(); + final newState = await fetch( + state.value!.nextOffset!, + state.value!.limit, + ); - state = AsyncData(newState.copyWith(items: [...oldItems, ...items])); + final oldItems = + state.value!.items.isEmpty ? [] : state.value!.items.cast(); + final items = newState.items.isEmpty ? [] : newState.items.cast(); + + state = AsyncData(newState.copyWith(items: [...oldItems, ...items])); + } finally { + state = AsyncData(oldState!); + } } Future> fetchAll() async { @@ -56,21 +62,25 @@ abstract class AutoDisposeFamilyPaginatedAsyncNotifier Future fetchMore() async { if (state.value == null || !state.value!.hasMore) return; + final oldState = state.value; - state = AsyncLoadingNext(state.asData!.value); + try { + state = AsyncLoadingNext(state.value!); - state = await AsyncValue.guard( - () async { - final newState = await fetch( - state.value!.nextOffset!, - state.value!.limit, - ); - return newState.copyWith(items: [ + final newState = await fetch( + state.value!.nextOffset!, + state.value!.limit, + ); + + state = AsyncData( + newState.copyWith(items: [ ...state.value!.items.cast(), ...newState.items.cast(), - ]); - }, - ); + ]), + ); + } finally { + state = AsyncData(oldState!); + } } Future> fetchAll() async { diff --git a/lib/provider/metadata_plugin/utils/paginated.dart b/lib/provider/metadata_plugin/utils/paginated.dart index 1c19828a..2695fcf6 100644 --- a/lib/provider/metadata_plugin/utils/paginated.dart +++ b/lib/provider/metadata_plugin/utils/paginated.dart @@ -14,18 +14,23 @@ mixin PaginatedAsyncNotifierMixin Future fetchMore() async { if (state.value == null || !state.value!.hasMore) return; - state = AsyncLoadingNext(state.asData!.value); + final oldState = state.value; + try { + state = AsyncLoadingNext(state.asData!.value); - final newState = await fetch( - state.value!.nextOffset!, - state.value!.limit, - ); + final newState = await fetch( + state.value!.nextOffset!, + state.value!.limit, + ); - final oldItems = - state.value!.items.isEmpty ? [] : state.value!.items.cast(); - final items = newState.items.isEmpty ? [] : newState.items.cast(); + final oldItems = + state.value!.items.isEmpty ? [] : state.value!.items.cast(); + final items = newState.items.isEmpty ? [] : newState.items.cast(); - state = AsyncData(newState.copyWith(items: [...oldItems, ...items])); + state = AsyncData(newState.copyWith(items: [...oldItems, ...items])); + } finally { + state = AsyncData(oldState!); + } } Future> fetchAll() async {