🐝Injectable
Documentação: Uso do Injectable no Flutter
O Injectable é uma biblioteca que facilita a configuração de injeção de dependências no Flutter, trabalhando junto com o GetIt para gerenciar instâncias e abstrair implementações de forma modular e reutilizável.
Arquivo de Configuração
No projeto, o arquivo de configuração do Injectable é responsável por definir as dependências que serão registradas no container de injeção.
Exemplo de Arquivo de Configuração
final getIt = GetIt.instance;
@module
abstract class RegisterModule {
// Registra DioConfig como Singleton
@singleton
DioConfig get dioConfig => DioConfig();
// Registra Dio usando DioConfig
@singleton
Dio get dio => DioConfig().dio;
// Registra o HttpClientInterface com a implementação baseada no Dio
@singleton
HttpClientInterface get httpClient => DioClientImpl(dio: dio);
}
// Inicializa o Injectable
@InjectableInit(
initializerName: 'init', // Nome do método gerado
preferRelativeImports: true, // Usa importações relativas
asExtension: true, // Permite chamar como extensão
)
void configureDependencies() => getIt.init();
Explicação do Arquivo
@module
:Define uma classe abstrata usada para registrar dependências.
Anotações como
@singleton
:Determinam o ciclo de vida da instância:
@singleton
: Cria uma única instância compartilhada.@lazySingleton
: Cria uma instância única sob demanda.@factory
: Cria uma nova instância sempre que solicitada.
configureDependencies
:Método usado para inicializar as dependências no início da aplicação.
Como Usar as Tags nas Classes
Registrando Classes com Anotações
Para que o Injectable saiba como gerenciar suas classes, adicione as anotações apropriadas diretamente nas implementações.
Exemplo de Classe DioClientImpl
import 'package:injectable/injectable.dart';
@singleton
class DioClientImpl implements HttpClientInterface {
final Dio dio;
DioClientImpl({required this.dio});
}
Exemplo de Usecase
import 'package:injectable/injectable.dart';
@lazySingleton
class ExampleUsecase {
final ExampleRepository repository;
ExampleUsecase({required this.repository});
}
Passos para Usar no Projeto
Configurar Dependências:
No início do aplicativo (por exemplo, no
main.dart
), chame o método de inicialização:
void main() { configureDependencies(); // Configura as dependências runApp(MyApp()); }
Resolver Instâncias:
Use o
getIt
para acessar as dependências registradas:
final httpClient = getIt<HttpClientInterface>();
Vantagens do Injectable
Automatização:
O
build_runner
gera o código necessário para registrar as dependências.
Desacoplamento:
As classes dependem apenas de abstrações, facilitando substituições e testes.
Flexibilidade:
Suporte para diferentes ciclos de vida (
@singleton
,@factory
, etc.).
Last updated