FilledStacks / flutter-tutorials

The repo contains the source code for all the tutorials on the FilledStacks Youtube channel.
MIT License
4.74k stars 1.76k forks source link

Stream controller providing stale values for onModelReady() #129

Open omkardeshpande3194 opened 3 years ago

omkardeshpande3194 commented 3 years ago

I followed the pattern you suggested in provider-aechitecture-pt2

The flow is common as follows, login view gets user credentials , passes to login view model which then passes to auth service. After api call is successful auth service adds user to user stream controller and then on login success navigator.pushNamed() Which pushes to homeview

ref - https://github.com/FilledStacks/flutter-tutorials/blob/master/012-provider-architecture-pt2/2-final/lib/ui/views/home_view.dart

onModelReady: (model) => model.loadData(Provider.of(context))

The issue I am facing is that the stream controller doesn't pass the user before model.loadData() is called for homeview. After reading a few articles I got to know that there is no way to ensure if streams deliver data. Am I missing something? how can I solve this issue?

Not sure if this is the right place to ask this question

omkardeshpande3194 commented 3 years ago

I guess we should be pulling user from some UserService in the home model loadData( ) method. As we cannot rely on pushed data (doesn't assure delivery) but we can wait and listen for data form user service in home model.

FilledStacks commented 3 years ago

@omkardeshpande3194 provider was updated quite a bit after this tutorial. I think you need to set lazy false for the StreamProvider for this to work.