我想创建将使用 Riverpod 返回 String 的提供程序。我正在使用 Provider 如下。我收到错误 The instance member 'name' can't be accessed in an initializer. Try replacing the reference to the instance member with a different expression
。有人可以告诉我应该如何创建提供程序吗?
class LearnUser {
final String uid;
final String name;
final usernameProvider = Provider((ref) {
return name;
});
LearnUser({required this.uid});
}
答案 0 :(得分:0)
'name' 是实例成员。您需要一个实例来访问成员变量。 你可以试试这个
class LearnUser {
final String uid;
String name;
Provider usernameProvider;
LearnUser({@required this.uid}){
this.usernameProvider = Provider((ref) {
return this.name;
});
}
}
答案 1 :(得分:0)
我会将提供者与 LearnUser 类分开。在我看来,它提供了更清晰的关注点分离。我从 Riverpod 文档中了解到,它们被称为全局变量。就像上面提到的海报一样,您的代码将无法工作,因为您正在尝试访问实例变量。
对于用户服务来说,可能是这样的。我还建议您研究 StateNotifier
和 StateNotifierProvider
,例如您可以用来创建用户服务。
// Creating the provider as global variable
final userNameProvider = Provider<String>((ref) =>
ref.watch(userService.state)?.user.name ?? '';
);