Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev5.2.0

depend

depend simplifica a gestão de dependências em aplicativos Flutter, fornecendo inicialização fácil e acesso a serviços em toda a árvore de widgets.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
1,2 mil
Curtidas
10
Pontos Pub
160

Instalar pacote

flutter pub add depend

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

depend é um pacote leve de injeção de dependência para Flutter que simplifica a inicialização e o acesso a serviços ao longo da árvore de widgets. Ele permite que os desenvolvedores registrem e recuperem dependências com pouca quantidade de código repetitivo, promovendo arquitetura limpa e testes mais fáceis. O pacote suporta todas as principais plataformas — Android, iOS, Web, macOS, Windows e Linux — e se integra perfeitamente em projetos existentes do Flutter por meio de um simples comando pub add. Com APIs intuitivas, o depend melhora a manutenibilidade do código e reduz a dependência de variáveis globais ou padrões baseados em contexto.

Casos de uso

  • Gerenciando serviços compartilhados em múltiplos telas
  • Simplificando testes de unidade e widgets
  • Substituindo configurações complexas de provedor
  • Habilitar arquitetura de aplicativo modular
  • Reduzindo o código repetitivo na configuração de dependências

Principais recursos

  • Registro e recuperação de serviço fáceis
  • Suporte multiplataforma
  • Boilerplate mínimo
  • Gerenciamento de ciclo de vida embutido
  • Suporta instâncias singleton e transitórias

Indicado para

  • Aplicações Flutter pequenas a médias
  • Equipes procurando soluções simples de injeção de dependência
  • Projetos que exigem separação clara de preocupações
  • Desenvolvedores evitando bibliotecas pesadas de gerenciamento de estado
  • Aplicativos direcionados a múltiplas plataformas

Considerações

  • Pode não ser adequado para grafos de dependência altamente complexos
  • Recursos avançados limitados em comparação com frameworks DI completos
  • Melhor para necessidades simples de dependência
  • Não é ideal para aplicativos com configuração extensa em tempo de execução
  • Requer planejamento cuidadoso para aplicativos em grande escala

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

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

Categorias

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.