depend vereinfacht die Abhängigkeitsverwaltung in Flutter-Apps und bietet eine einfache Initialisierung sowie den Zugriff auf Dienste über die gesamte Widget-Baumstruktur hinweg.
Aus öffentlichen Paketdaten erstellte Orientierung.
depend ist ein leichtgewichtiger Dependency-Injection-Paket für Flutter, das die Initialisierung und den Zugriff auf Dienste innerhalb des Widgetbaums vereinfacht. Es ermöglicht Entwicklern, Abhängigkeiten mit minimalem Boilerplate zu registrieren und abzurufen, was eine saubere Architektur und einfachere Tests fördert. Das Paket unterstützt alle wichtigen Plattformen – Android, iOS, Web, macOS, Windows und Linux – und lässt sich problemlos über einen einfachen pub add-Befehl in bestehende Flutter-Projekte integrieren. Mit intuitiven APIs verbessert depend die Wartbarkeit des Codes und verringert die Abhängigkeit von globalen Variablen oder kontextlastigen Mustern.
Anwendungsfälle
Verwaltung gemeinsamer Dienste über mehrere Bildschirme
Einfachere Einheit- und Widget-Tests
Komplexe Anbieterkonfigurationen ersetzen
Modulare App-Architektur aktivieren
Verringern von Boilerplate bei der Abhängigkeitskonfiguration
Hauptmerkmale
Einfache Dienstregistrierung und -abruf
Plattformübergreifende Unterstützung
Minimales Boilerplate
Eingebautes Lebenszyklus-Management
Unterstützt sowohl Singleton- als auch transiente Instanzen
Geeignet für
Kleine bis mittelgroße Flutter-Anwendungen
Teams, die einfache DI-Lösungen suchen
Projekte, die eine klare Trennung von Anliegen erfordern
Entwickler, die schwere State-Management-Bibliotheken vermeiden
Anwendungen für mehrere Plattformen
Hinweise
Kann möglicherweise nicht für sehr komplexe Abhängigkeitsgraphen geeignet sein
Eingeschränkte erweiterte Funktionen im Vergleich zu vollständigen DI-Frameworks
Am besten für einfache Abhängigkeitsanforderungen
Nicht ideal für Anwendungen mit umfangreicher Laufzeitkonfiguration
Erfordert sorgfältige Planung für großskalige Anwendungen
Original-README
Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.
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