Pakete, Repositories und App-Kategorien suchen

Paketdetailsv5.2.0

depend

depend vereinfacht die Abhängigkeitsverwaltung in Flutter-Apps und bietet eine einfache Initialisierung sowie den Zugriff auf Dienste über die gesamte Widget-Baumstruktur hinweg.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
1180
Likes
10
Pub-Punkte
160

Paket installieren

flutter pub add depend

Paketübersicht

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.

Logo Frame

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.

Table of Contents


Installation

Add the library to the pubspec.yaml of your project:

dependencies:
  depend: ^latest_version

Install the dependencies:

flutter pub get

Usage Examples

Example 1: Simple Initialization
Step 1: Define the Dependency

Create a class that extends DependencyContainer and initialize your dependencies:

class RootContainer extends DependencyContainer {
  final ApiService apiService;

  RootContainer({required this.apiService});


  void dispose() {
    apiService.dispose();
  }
}
Step 2: Define the DependencyFactory

Create a class that extends DependencyContainer and initialize your dependencies:

class RootDependencyFactory extends DependencyFactory<RootContainer> {
  
  Future<RootContainer> create() async {
    return RootContainer(
      apiService: await ApiService.initialize(),
    );
  }
  
  // or

  RootContainer create() {
     return RootContainer(
        apiService: ApiService.initialize(),
     );
  }
}
Step 3: Use DependencyScope

Wrap your app in a DependencyScope to provide dependencies:

void main() {
  runApp(
    DependencyScope<RootContainer, RootFactory>(
       factory: RootFactory(), 
       placeholder: const Center(child: CircularProgressIndicator()), 
       builder: (BuildContext context) => const MyApp(),
    ),
  );
}
Step 4: Access the Dependency in a Widget

You can now access the dependency using DependencyProvider anywhere in the widget tree:

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final apiService = DependencyProvider.of<RootContainer>(context).apiService;

    return FutureBuilder(
      future: apiService.getData(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const CircularProgressIndicator();
        } else if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}');
        }

        return Text('Data: ${snapshot.data}');
      },
    );
  }
}

Example 2: DependencyProvider
final RootContainer dep = await RootFactory().create();

DependencyProvider<RootContainer>(
  dependency: dep,
  builder: () => YourWidget();
  // or
  child: YourWidget()
)

class YourWidget extends StatelessWidget {
  @override
  Widget build(BuildContext) {
    root = DependencyProvider.of<RootContainer>(context);
    ...
  }
}
Example 3: DependencyScope
DependencyScope<RootContainer, RootFactory>(
      factory: RootFactory(),
      builder: (BuildContext context) => Text('Inject'),
      placeholder: Text('Placeholder'),
      errorBuilder: (Object? error) => Text('Error'),
    ),

Example 4: Lazy Initialization

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
class RootContainer extends DependencyContainer {
  // Service will be created only when accessed for the first time
  final LazyGet<ApiService> apiService;
  final LazyGet<DatabaseService> database;
}

class RootDependencyFactory extends DependencyFactory<RootContainer> {
  RootContainer create() {
     return RootContainer(
        apiService: lazyGet(ApiService.initialize),
        database: lazyGet(DatabaseService.initialize),
     );
  }
}

// Usage in widgets
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final container = DependencyProvider.of<RootContainer>(context);
    
    // ApiService is created only at this moment
    final api = container.apiService();
    
    return Text('Service initialized: ${api}'); // Instance: ApiService
  }
}
Using LazyFutureGet for Asynchronous Dependencies
class RootContainer extends DependencyContainer {
  final LazyFutureGet<DatabaseService> database;
      
  final LazyFutureGet<AuthService> authService;
}

class RootDependencyFactory extends DependencyFactory<RootContainer> {
  RootContainer create() {
     return RootContainer(
        apiService: lazyFutureGet(ApiService.initialize),
        database: lazyFutureGet(DatabaseService.initialize),
     );
  }
}

// Usage in widgets
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final container = DependencyProvider.of<RootContainer>(context);
    
    return FutureBuilder<DatabaseService>(
      // Database is initialized only when this widget is built
      future: container.database(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        }
        
        return Text('Database ready: ${snapshot.data?.isConnected}');
      },
    );
  }
}

Benefits of Lazy Initialization:

  • Faster App Startup: Dependencies are created only when needed
  • Memory Optimization: Unused services don't consume memory
  • Flexible Initialization: You can control when heavy operations are performed
  • Simple API: Easy to use with both sync and async dependencies

Codecov

Codecov

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.