BLoC PatternEasy20 XP3 min read
What is RepositoryProvider and how does it relate to BlocProvider?
TL;DR: RepositoryProvider makes a repository available to all widgets and Blocs below it in the tree. BlocProvider can then read the repository via context.read<MyRepo>() in its create function.
Full Answer
RepositoryProvider is the dependency injection mechanism for flutter_bloc. It's identical to BlocProvider but semantically for non-Bloc objects (repositories, services).
- ▸RepositoryProvider: Provides a repository; does NOT close it when removed (repos are long-lived)
- ▸MultiRepositoryProvider: Flattens nested RepositoryProviders
- ▸context.read<QuestionsRepository>(): Access repository from any descendant widget or BlocProvider.create
🎯
Place RepositoryProviders above BlocProviders in the tree. This way, BlocProvider.create can use context.read<Repo>() to inject dependencies without accessing getIt.
Code Examples
dartRepository + Bloc provider layering
Output
// QuestionsRepository provided above QuizBloc // QuizBloc accesses it via context.read<QuestionsRepository>()
Common Mistakes
- ✗Creating repositories inside BlocProvider.create — repositories should outlive blocs
- ✗Using RepositoryProvider for Blocs — semantically wrong; use BlocProvider which auto-closes on removal
Interview Tip
💡
The layering is: RepositoryProvider (top) -> BlocProvider (uses repos) -> Widgets (uses blocs). Each layer depends only on the layer above it.
#repository-provider#bloc-provider#dependency-injection#context