What problem does it solve? Flutter apps need a consistent way to construct and share services, repositories, and SDK handles without hidden global state or untestable code. This Skill defines how to register and inject dependencies at runtime so classes stay testable and the object graph stays predictable. ## Core Features & Use Cases - get_it service locator setup: Register services with registerSingleton, registerLazySingleton, or registerFactory, and wire setupLocator() in main() before runApp(). - Riverpod provider variant: Use Riverpod providers for dependencies that need reactive state, widget lifecycle, or per-scope disposal in Riverpod projects. - Constructor injection patterns: Push dependencies through constructors instead of calling GetIt.instance inside class bodies, keeping classes testable without a locator. - Test isolation: Reset the locator with getIt.reset() or pushNewScope() in setUp and register fakes for clean, order-independent tests. - Use Case: When adding a new AnalyticsService to a Flutter app, register it as a lazy singleton in setupLocator(), inject it via constructor into the services that need it, and override it with a no-op fake in tests. ## Quick Start Ask the agent to set up dependency injection for your Flutter app by creating a setupLocator() function with get_it registrations and calling it in main() before runApp().