Closed kroikie closed 4 years ago
@MiSikora
The issue at https://github.com/flutter/flutter/issues/36179 has been closed and moved here. Future collaboration on this issue will be done here.
Hi @MiSikora
are you still experiencing this issue with the latest version of Flutter
and firebase_database?
If so can you please provide your flutter doctor -v
?
Also, to better address the issue, would be helpful
if you could post a self contained app on github
or the steps to reproduce it.
Thank you
Without additional information, we are unfortunately not sure how to resolve this issue. We are therefore reluctantly going to close this bug for now. Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.
Could everyone who still has this problem please file a new issue with the exact descriptions what happens, logs and the output of 'flutter doctor -v' please. All system setups can be slightly different so its always better to open new issues and reference related issues.
Steps to Reproduce
When I was implementing pagination using Firebase DB and streams our QA noticed that app crashes when many items are loaded. At first we thought it might be too big of a query but further investigation showed that the previous stream is not being unsubscribed properly.
In order to reproduce the bug run the app from the linked repo (Firebase is only configured for Android).
https://github.com/MiSikora/Flutter-bug
What you'll notice is that awaiting on a previous subscription to cancel hangs the app and the second log is never printed.
https://github.com/MiSikora/Flutter-bug/blob/0ec595f43356418e3aa1dd170d65139db44b0f71/lib/main.dart#L67-L70
I believe that the issue is that original DB stream is subscribed to with
await for
syntax and it creates one more subscription which is not referenced thus not cancelled. This prevents stream controller to be released, leaks resources and prevents the downstream to be cancelled.https://github.com/MiSikora/Flutter-bug/blob/0ec595f43356418e3aa1dd170d65139db44b0f71/lib/main.dart#L83-L88
https://github.com/flutter/plugins/blob/518c8f03c0018af0c5dbacfab336c82abc82d5f6/packages/firebase_database/lib/src/query.dart#L43-L47
While I realize that the thing I want to achieve in the PoC app could be easily done with i.e.
map()
function it is just to showcase issue withawait for
and Firebase DB streams.Logs
flutter run --verbose
flutter analyze
flutter doctor -v