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,
    );
  }.
.
.
.
.
.
.
.
.