Riverpod : initState 方法中的访问提供程序

Posted

技术标签:

【中文标题】Riverpod : initState 方法中的访问提供程序【英文标题】:Riverpod : Access Provider in initState method 【发布时间】:2021-01-19 10:07:20 【问题描述】:

尝试读取 initState 中的 streamProvider,但失败。请启发我,我在这里做错了什么?

  @override
  void initState() 
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) 
      final userStream = context.read(userStreamProvider);
      print('user : $userStream'); // user : AsyncValue<Null>.loading()
    );
  

到目前为止,我发现context.read(userStreamProvider) 只在内部起作用 build(BuildContext context)方法

【问题讨论】:

【参考方案1】:

您的代码有效。问题是,您没有等待加载用户。

你想要的大概是:

  @override
  void initState() 
    super.initState();
    context.read(userStreamProvider.last).then((user) 
      print('user $user');
    );
    
  

通过阅读userStreamProvider.last,您将能够等待加载用户。然后,您可以像使用所有期货一样使用 .thenawait

【讨论】:

天啊!你回答了我的问题!

以上是关于Riverpod : initState 方法中的访问提供程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中调用initState中的异步方法

用 mockito 测试 Riverpod 的正确方法是啥

等效于 Riverpod 中的 ChangeNotifierProvider 小部件

将文档中的值从数据库保存到 initState 值的颤振问题

Riverpod:是不是有在另一个 StreamProvider 中读取 StreamProvider 的正确方法?

RiverPod - 如何在不在小部件中的 AsyncValue 上等待使用 FutureProvider