如何调用Riverpod中FamilyAsyncNotifier的成员方法?
解决FamilyAsyncNotifier成员方法调用问题
改用FamilyAsyncNotifier后,调用成员方法需要传入对应的family参数才能获取到正确的Notifier实例,原来的写法缺少了参数传递。
正确调用方式
将调用代码修改为:
await ref.read(postViewModel(targetPostId).notifier).fetchTargetPost(targetPostId);
原因说明
AsyncNotifierProvider.family是带参数的Provider,必须传入定义时指定的参数(这里是String类型的targetPostId),才能定位到对应的Notifier实例。普通AsyncNotifierProvider不需要参数,所以直接.notifier就能获取到,但Family版本必须先传入参数,再获取notifier。
额外优化提示
如果fetchTargetPost方法可以复用build方法传入的参数,还能简化代码:
// 在PostViewModel里修改fetchTargetPost Future<Post> fetchTargetPost() async { state = const AsyncValue.loading(); Post post = Post.empty(); state = await AsyncValue.guard(() async { post = await _fetchPostUseCase(buildArg); return post; }); return post; } // 调用时简化为 await ref.read(postViewModel(targetPostId).notifier).fetchTargetPost();
内容的提问来源于stack exchange,提问作者foseja
相关产品推荐
相关产品推荐

