Search code examples
flutterdartproviderriverpod

Riverpod : Access Provider in initState method


Trying to read a streamProvider inside initState, but failed. Enlight me please, what am I doing wrong here?

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

So far, what I found that context.read(userStreamProvider) only works inside build(BuildContext context) method


Solution

  • Your code works. The problem is, you are not waiting for the user to be loaded.

    What you want is probably:

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

    By reading userStreamProvider.last, you will be able to wait for the user to be loaded. You can then use .then or await like with all futures.