Package selection guidance compiled from public package information, community data, and project usage.
depend is a lightweight dependency injection package for Flutter that simplifies service initialization and access throughout the widget tree. It enables developers to register and retrieve dependencies with minimal boilerplate, promoting clean architecture and easier testing. The package supports all major platforms—Android, iOS, Web, macOS, Windows, and Linux—and integrates seamlessly into existing Flutter projects via a simple pub add command. With intuitive APIs, depend enhances code maintainability and reduces reliance on global variables or context-heavy patterns.
Use cases
Managing shared services across multiple screens
Simplifying unit and widget testing
Replacing complex provider setups
Enabling modular app architecture
Reducing boilerplate in dependency setup
Key features
Easy service registration and retrieval
Cross-platform support
Minimal boilerplate
Built-in lifecycle management
Supports both singleton and transient instances
Suitable for
Small to medium-sized Flutter applications
Teams seeking simple DI solutions
Projects requiring clean separation of concerns
Developers avoiding heavy state management libraries
Apps targeting multiple platforms
Considerations
May not suit highly complex dependency graphs
Limited advanced features compared to full DI frameworks
Best for straightforward dependency needs
Not ideal for apps with extensive runtime configuration
Requires careful planning for large-scale apps
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
depend is a library for dependency management in Flutter applications. It provides a convenient way to initialize and access services and repositories via InheritedWidget.
Features 🚀
Dependency Initialization: Prepare all dependencies before the app launches.
Global Access: Access dependencies from anywhere in the widget tree.
Parent Dependencies Support: Easily create nested or connected dependencies.
Ease of Use: Integrate the library into existing code with minimal changes.
The library provides LazyGet and LazyFutureGet classes for lazy initialization of services. Dependencies are created only when they are first accessed, which improves application startup time.
Using LazyGet for Synchronous Dependencies
classRootContainerextendsDependencyContainer{
// Service will be created only when accessed for the first timefinalLazyGet<ApiService> apiService;
finalLazyGet<DatabaseService> database;
}
classRootDependencyFactoryextendsDependencyFactory<RootContainer> {
RootContainercreate() {
returnRootContainer(
apiService: lazyGet(ApiService.initialize),
database: lazyGet(DatabaseService.initialize),
);
}
}
// Usage in widgetsclassMyWidgetextendsStatelessWidget{
@overrideWidgetbuild(BuildContext context) {
final container = DependencyProvider.of<RootContainer>(context);
// ApiService is created only at this momentfinal api = container.apiService();
returnText('Service initialized: ${api}'); // Instance: ApiService
}
}
Using LazyFutureGet for Asynchronous Dependencies
classRootContainerextendsDependencyContainer{
finalLazyFutureGet<DatabaseService> database;
finalLazyFutureGet<AuthService> authService;
}
classRootDependencyFactoryextendsDependencyFactory<RootContainer> {
RootContainercreate() {
returnRootContainer(
apiService: lazyFutureGet(ApiService.initialize),
database: lazyFutureGet(DatabaseService.initialize),
);
}
}
// Usage in widgetsclassMyWidgetextendsStatelessWidget{
@overrideWidgetbuild(BuildContext context) {
final container = DependencyProvider.of<RootContainer>(context);
returnFutureBuilder<DatabaseService>(
// Database is initialized only when this widget is built
future: container.database(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
returnCircularProgressIndicator();
}
returnText('Database ready: ${snapshot.data?.isConnected}');
},
);
}
}
Benefits of Lazy Initialization:
Faster App Startup: Dependencies are created only when needed