Flutter -RiverPod 新手.如何在我看来观看 StateNotifier

Flutter - RiverPod Newbie. How to watch StateNotifier in my view

我有一个从 FireStore 获取食谱的食谱存储库

class RecipeRepository {

  Future<List<Recipe>> readAll() async {
    final snap = await _recipeRef.get();
    return snap.docs.map((doc) => doc.data()).toList();
  }
}

这里我将存储库作为提供者返回

final recipeRepositoryProvider =
    Provider<RecipeRepository>((ref) => RecipeRepository());

这里我有一个 Class,我想用它来控制 UI

的状态
final recipeAsyncController =
    StateNotifierProvider<RecipeAsyncNotifier, AsyncValue<List<Recipe>>>(
        (ref) => RecipeAsyncNotifier(ref.read));

class RecipeAsyncNotifier extends StateNotifier<AsyncValue<List<Recipe>>> {
  RecipeAsyncNotifier(this._read) : super(const AsyncLoading()) {
    init();
  }
  final Reader _read;

  init() async {
    final recipes = await _read(recipeRepositoryProvider).readAll();
    state = AsyncData(recipes);
  }
}

如您所见,我在读取时包装了 recipeRepositoryProvider。

在我的 UI 我想查看食谱列表

    return Consumer(
      builder: (context, watch, child) {
        return watch(recipeAsyncController).when();
      },
    );

问题是我收到以下错误。

尝试访问异步调用时。

https://pub.dev/documentation/flutter_riverpod/latest/flutter_riverpod/Consumer-class.html

builder 函数中的第二个参数实际上是一个 ref 对象。

  return Consumer(
      builder: (context, ref, child) {
        return ref.watch(recipeAsyncController).when();
      },
    );