我想创建提供程序,将返回Riverpod字符串。我使用Provider,如下所示。我收到一个错误的The instance member 'name' can't be accessed in an initializer. Try replacing the reference to the instance member with a different expression
。有人可以告诉我应该如何创建provider吗?
class LearnUser {
final String uid;
final String name;
final usernameProvider = Provider((ref) {
return name;
});
LearnUser({required this.uid});
}
发布于 2021-03-01 12:02:08
“‘name”是实例成员。您需要一个实例来访问成员变量。你可以试试这个
class LearnUser {
final String uid;
String name;
Provider usernameProvider;
LearnUser({@required this.uid}){
this.usernameProvider = Provider((ref) {
return this.name;
});
}
}
发布于 2021-03-01 17:05:05
我会将provider与LearnUser类分开。在我看来,它提供了更清晰的关注点分离。我从Riverpod文档中了解到的是,它们是全球变量。就像上面提到的,你的代码不会工作,因为你正在尝试访问一个实例变量。
也许是像这样的用户服务。我还建议你用StateNotifierProvider
研究一下StateNotifier
,你可以用它来创建一个用户服务。
// Creating the provider as global variable
final userNameProvider = Provider<String>((ref) =>
ref.watch(userService.state)?.user.name ?? '';
);
https://stackoverflow.com/questions/66413030
复制相似问题