我有一个名为NavigatorRepository
的类,我试图访问它,userProvider
。我应该如何访问NavigatorRepository
中的userProvider?我觉得我什么都试过了除了正确的。。
下面是NavigatorRepository
的一个片段
final user = Provider((ref) {
return ref.watch(userProvider.notifier).getUser();
});
...
class NavigatorRepository {
...
Future<dynamic> _get(
String path, {
Map<String, Object?>? queryParameters,
}) async {
var x = user; <== How do I get this to work?
}
}
UserProvider
class UserNotifier extends StateNotifier<User> {
UserNotifier()
: super(User(accessToken: '');
void setUser(User user) {
state = user;
}
User getUser() {
return state;
}
}
final userProvider = StateNotifierProvider<UserNotifier, User>((ref) {
return UserNotifier();
});
2条答案
按热度按时间htzpubme1#
我发现这篇文章涵盖了我正在做的事情。
https://github.com/rrousselGit/riverpod/issues/295#issuecomment-770384596
ecfdbz9o2#
有很多方法可以做到这一点。
1.现在有一个更新的提供程序(Async)NotifierProvider用于此目的:
1.下一个方法是将
ref
参数传递给类构造函数:1.以下方式更好地表达了实现依赖关系的原则,但与Riverpod中的设计模式相反:
其思想是将所有必要的依赖项立即传递给类的构造函数。最后,您可以确定您的类服务只依赖于构造函数中的服务。
还请注意,我已经将所有服务设置为私有,以避免外部访问。如果你不需要,就把田打开。
1.在调用任何方法时,只需传递
ref
参数即可:虽然在这里你可以把
User user
作为参数传递给方法并在内部使用它。但显然可以有更多这样的依赖项,然后只传递ref
会更容易。