我有这个代码
@riverpod
class MoodNotifier extends _$MoodNotifier {
@override
Future<MoodType?> build(DateTime date) async {
final healthService = ref.watch(healthServiceProvider);
final response = await healthService.moodDateGet(
date: DateFormat('yyyy-MM-dd').format(date),
);
MoodType? mood = MoodType.values
.firstWhereOrNull((element) => element.text == response.body);
return mood;
}
Future postMood(MoodType moodType) async {
final healthService = ref.watch(healthServiceProvider);
final response = await healthService.moodPost(
body: UserMoodRequest(
moodType: moodType.toUserMoodReq,
));
log(response.toString());
Logger.root.log(Level.INFO, response);
}
}
所以当我打电话给 postMood 时,我需要写一些类似的东西
ref.read(moodNotifierProvider(DateTime.now()).notifier).postMood(MoodType.happy);
所以我想避免使用每当我使用其他方法时传递的日期参数..我怎样才能用 Riverpod 做到这一点
一般来说,这就是使用参数的全部意义,这样您的供应商就会根据参数变得个性化。
但是,您可以使用简单的提供程序(
Provider
或 StateProvider
)来存储所需的日期:
例如:
final dateProvider = Provider<DateTime>((ref) => DateTime.now());
然后在
build
方法中:
@riverpod
class MoodNotifier extends _$MoodNotifier {
@override
Future<MoodType?> build() async {
final healthService = ref.watch(healthServiceProvider);
final date = ref.watch(dateProvider); // <-- here
final response = await healthService.moodDateGet(
date: DateFormat('yyyy-MM-dd').format(date),
);
MoodType? mood = MoodType.values
.firstWhereOrNull((element) => element.text == response.body);
return mood;
}
}