Riverpod:在initState方法中访问Provider

3

我在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)方法内部使用。
2个回答

12

您的代码是可行的。问题在于,您没有等待用户加载完成。

您可能需要的是:

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

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


3

我正在使用最新的Riverpod版本。它不支持在initstate中使用context.read函数来获取provide值。如何在当前版本的Riverpod中访问provider。


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Marcel Hofgesang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接