I'm using BLoC with StreamBulder for application scoped (singleton) and page scoped BLoCs and BlocProvider for widget scoped BLoCs. What I always miss in articles - they don't explain how to release resources. E.g. we use RxDart and cancel subscriptions when a BLoC with subscriptions gets destroyed. Flutter doesn't have really good lifecycle hooks, but it's possible to know when a BLoC instance gets destroyed.