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.
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