I'm using the Provider package with Flutter (https://pub.dev/packages/provider) + Firebase Auth + Firestore and I'm facing a problem with Streams I can't solve. Here is some code:
In my main.dart
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
InheritedProvider<FeedController>(create: (_) => FeedController()),
... others
],
child: MaterialApp(...)
...
}
My FeedController hosts multiples Streams like those two examples:
final _feedData = StreamController<QuerySnapshot>();
Stream<QuerySnapshot> get feedData => _feedData.stream;
or
Stream<QuerySnapshot> loadTags() async* {
yield* _database.retrieveUserTags(await _auth.retrieveUserUid());
}
My problem is when I'm logging out of Firebase, as I'm not authenticated I'm having "PERMISSION_DENIED: Missing or insufficient permissions". I know why: my streams are not closed and as I'm logged out I don't have the right to read data from Firebase (I've blocked unauth reads). I'd just want to close every instance passed by Provider BEFORE logging out then calling my logging out function. Any ideas of how could I do it? It's just in the logs but I'd like to solve the problem.
I've tried to do something like that:
In my FeedController
// Closing all Streams
void dispose() {
_isLoadingController.close();
_feedData.close();
_newData.close();
}
And calling before logging out:
Provider.of<FeedController>(context, listen: false).dispose();
But I'm having errors saying I can't add data after a Stream is closed even If I'm not trying to add data to closed Streams..
Thank you