RP: AsyncNotifier 更新法 - Ki-Kobayashi/flutter_wiki GitHub Wiki
- AsyncValue.guard
- update関数
- state.when
https://zenn.dev/r0227n/articles/riverpod-asyncnotifier-updatemethod
https://github.com/rrousselGit/riverpod/discussions/2423
.
Future<void> onLoadMoreItems({
required String param1,
required String param2,
}) async {
state = const AsyncValue.loading();
final skip = state.value?.items.length ?? 0;
state = await AsyncValue.guard<ItemsState>(() async {
final response = await ref
.read(articleTabViewServiceProvider)
.fetchItems(
param1: param1,
param2: param2,
skip: skip,
);
final previousState = state.valueOrNull;
if (previousState != null) {
return previousState.copyWith(
itemCount: response.itemCount,
items: [
...state.value?.items ?? [],
...response.items,
],
);
}
return state.requireValue;
});
return null;
}
.
Future<String?> onLoadMoreItems({
required String param1,
required String param2,
}) async {
final result = await _fetchItems(
param1: param1,
param2: param2,
);
if (result.errMessage != null) {
return result.errMessage;
}
update((state) async {
final response = result.data ?? const ItemResponse();
return state.copyWith(
itemCount: response.itemCount,
itemList: [
...state.itemList,
...response.itemList
],
);
});
return null;
}
Future<({String? errMsg, ItemResponse? items})>
_fetchItems({
required String param1,
required String param2,
}) async {
final skip = state.value?.itemLIst.length ?? 0;
final result = await AsyncValue.guard<ItemResponse>(() async {
return await ref
.read(itemServiceProvider)
.fetchItems(
param1: param1,
param2: param2,
skip: skip,
);
});
if (result.hasError) {
return (
errMsg: (result.error as CostomNetworkExceptions).errMsg,
items: null,
);
}
return (
errMsg: null,
items: result.asData?.value,
);
}
.
.
.
.
.
.
.
.
.