These print statements don't get printed in order of how the appear. I tried to make this async
but it blows up. Essentially I need to listen to a StreamProvider
and update a StateProvider
based on the stream. Here is my code for the StateProvider
.
final unreadNotificationsProvider = StateProvider.autoDispose<bool>((ref) {
final notifications = ref.watch(notificationsStreamProvider.stream);
bool unreadNotificationsRead = false;
notifications.listen((objects) {
for (var n = 0; n < objects.length; n ) {
print("objects: ${objects[n].notification.read}"); <-- Prints second
if (!objects[n].notification.read) {
print("GETTING HERE"); // <-- Prints third
unreadNotificationsRead = true;
}
}
});
print("unreadNotificationsRead: $unreadNotificationsRead"); // <-- Prints first
return unreadNotificationsRead;
});
CodePudding user response:
Try to get the value of the stream instead of listening, you dont have to listen the stream because you are already usign ref.watch means the stateProvider will update everytime the notificationsStreamProvider changes.
Replace
final notifications = ref.watch(notificationsStreamProvider.stream);
For
final notifications = ref.watch(notificationsStreamProvider).asData?.value;
Remove notifications.listen
and your objects
variable will be notifications
and before accesing you should ask if notifications == null
or notifications.isEmpty
Let me know...