首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Riverpod创建提供程序

Riverpod创建提供程序
EN

Stack Overflow用户
提问于 2021-03-01 03:23:26
回答 2查看 103关注 0票数 0

我想创建提供程序,将返回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吗?

代码语言:javascript
运行
复制
class LearnUser {
  final String uid;

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

回答 2

Stack Overflow用户

发布于 2021-03-01 12:02:08

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

代码语言:javascript
运行
复制
class LearnUser {
 final String uid;
 String name;
 Provider usernameProvider;
 LearnUser({@required this.uid}){
  this.usernameProvider = Provider((ref) {
   return this.name;
  });
 }
}
票数 0
EN

Stack Overflow用户

发布于 2021-03-01 17:05:05

我会将provider与LearnUser类分开。在我看来,它提供了更清晰的关注点分离。我从Riverpod文档中了解到的是,它们是全球变量。就像上面提到的,你的代码不会工作,因为你正在尝试访问一个实例变量。

也许是像这样的用户服务。我还建议你用StateNotifierProvider研究一下StateNotifier,你可以用它来创建一个用户服务。

代码语言:javascript
运行
复制
// Creating the provider as global variable
final userNameProvider = Provider<String>((ref) => 
  ref.watch(userService.state)?.user.name ?? '';
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66413030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档