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();
},
);
我有一个从 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();
},
);