chore: fix pagination not working

This commit is contained in:
Kingkor Roy Tirtho 2025-09-05 17:06:12 +06:00
parent 83172f198c
commit d22b5349a3
2 changed files with 44 additions and 29 deletions

View File

@ -12,18 +12,24 @@ abstract class FamilyPaginatedAsyncNotifier<K, A>
Future<void> fetchMore() async { Future<void> fetchMore() async {
if (state.value == null || !state.value!.hasMore) return; if (state.value == null || !state.value!.hasMore) return;
state = AsyncLoadingNext(state.asData!.value); final oldState = state.value;
final newState = await fetch( try {
state.value!.nextOffset!, state = AsyncLoadingNext(state.asData!.value);
state.value!.limit,
);
final oldItems = final newState = await fetch(
state.value!.items.isEmpty ? <K>[] : state.value!.items.cast<K>(); state.value!.nextOffset!,
final items = newState.items.isEmpty ? <K>[] : newState.items.cast<K>(); state.value!.limit,
);
state = AsyncData(newState.copyWith(items: <K>[...oldItems, ...items])); final oldItems =
state.value!.items.isEmpty ? <K>[] : state.value!.items.cast<K>();
final items = newState.items.isEmpty ? <K>[] : newState.items.cast<K>();
state = AsyncData(newState.copyWith(items: <K>[...oldItems, ...items]));
} finally {
state = AsyncData(oldState!);
}
} }
Future<List<K>> fetchAll() async { Future<List<K>> fetchAll() async {
@ -56,21 +62,25 @@ abstract class AutoDisposeFamilyPaginatedAsyncNotifier<K, A>
Future<void> fetchMore() async { Future<void> fetchMore() async {
if (state.value == null || !state.value!.hasMore) return; 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( final newState = await fetch(
() async { state.value!.nextOffset!,
final newState = await fetch( state.value!.limit,
state.value!.nextOffset!, );
state.value!.limit,
); state = AsyncData(
return newState.copyWith(items: [ newState.copyWith(items: [
...state.value!.items.cast<K>(), ...state.value!.items.cast<K>(),
...newState.items.cast<K>(), ...newState.items.cast<K>(),
]); ]),
}, );
); } finally {
state = AsyncData(oldState!);
}
} }
Future<List<K>> fetchAll() async { Future<List<K>> fetchAll() async {

View File

@ -14,18 +14,23 @@ mixin PaginatedAsyncNotifierMixin<K>
Future<void> fetchMore() async { Future<void> fetchMore() async {
if (state.value == null || !state.value!.hasMore) return; 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( final newState = await fetch(
state.value!.nextOffset!, state.value!.nextOffset!,
state.value!.limit, state.value!.limit,
); );
final oldItems = final oldItems =
state.value!.items.isEmpty ? <K>[] : state.value!.items.cast<K>(); state.value!.items.isEmpty ? <K>[] : state.value!.items.cast<K>();
final items = newState.items.isEmpty ? <K>[] : newState.items.cast<K>(); final items = newState.items.isEmpty ? <K>[] : newState.items.cast<K>();
state = AsyncData(newState.copyWith(items: <K>[...oldItems, ...items])); state = AsyncData(newState.copyWith(items: <K>[...oldItems, ...items]));
} finally {
state = AsyncData(oldState!);
}
} }
Future<List<K>> fetchAll() async { Future<List<K>> fetchAll() async {