我们如何从被 Package 的riverpod提供程序访问方法?
- ContentProvider * 可以通过"watch"从 * UserProvider * 访问用户值,这个方向没有问题,另一方面,* UserProvider * 也需要访问 * ContentProvider * 的方法,所以需要双向通信。
对于这种情况,我需要从UserProvider调用 * deleteContents * 方法。
我不喜欢为了逻辑安全而将它们合并。
class ContentProviderNotifier extends ChangeNotifier {
final User? currentUser;
ContentProviderNotifier({required this.currentUser});
addContent(Content content) {
content.user = currentUser?.name;
...
}
deleteContents() {
...
}
}
final contentProvider = ChangeNotifierProvider<ContentProviderNotifier>(
(ref) {
final user = ref.watch(userProvider).currentUser;
return ContentProviderNotifier(currentUser: user);
},
);
class UserProviderNotifier extends ChangeNotifier {
UserProviderNotifier();
User? currentUser;
deleteUsers(){
// here to call a method from contentProvider
deleteContents();
}
}
final userProvider = ChangeNotifierProvider<UserProviderNotifier>(
(ref) {
return UserProviderNotifier();
},
);
如果我尝试像这样向UserProvider提供ContentProvider
final userProvider = ChangeNotifierProvider<UserProviderNotifier>(
(ref) {
final content = ref.watch(contentProvider); // <----
return UserProviderNotifier(content);
},
);
但我知道这说不通。
- 无法推断"userProvider"的类型,因为它在整个循环中依赖于自身:contentProvider、userProvider。尝试向循环中的一个或多个变量添加显式类型以打破循环。darttop_level_cycle *
1条答案
按热度按时间odopli941#
您可以创建UserProviderNotifier,以便它将ref作为输入,如下所示:
Riverpod文档的这一部分提到这是一个常见用例。