RP: AsyncNotifier 更新法 - Ki-Kobayashi/flutter_wiki GitHub Wiki

🟩 AsyncNotifier でstate の更新方法は3つ

  • AsyncValue.guard
  • update関数
  • state.when

📚参考;update guard

https://zenn.dev/r0227n/articles/riverpod-asyncnotifier-updatemethod

📚💡参考;AsyncNotifierの更新3つ

https://github.com/rrousselGit/riverpod/discussions/2423

.

🟡 AsyncValue.guard

  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;
  }	
	

.

🟡 update

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

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

🟩

🟡

.

⚠️ **GitHub.com Fallback** ⚠️