Riverpod 创建提供程序

问题描述

我想创建将使用 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});
}

解决方法

'name' 是实例成员。您需要一个实例来访问成员变量。 你可以试试这个

class LearnUser {
 final String uid;
 String name;
 Provider usernameProvider;
 LearnUser({@required this.uid}){
  this.usernameProvider = Provider((ref) {
   return this.name;
  });
 }
}
,

我会将提供者与 LearnUser 类分开。在我看来,它提供了更清晰的关注点分离。我从 Riverpod 文档中了解到,它们被称为全局变量。就像上面提到的海报一样,您的代码将无法工作,因为您正在尝试访问实例变量。

对于用户服务来说,可能是这样的。我还建议您研究 StateNotifierStateNotifierProvider,例如您可以用来创建用户服务。

// Creating the provider as global variable
final userNameProvider = Provider<String>((ref) => 
  ref.watch(userService.state)?.user.name ?? '';
);