Gerando Features Escaláveis com Mason e Flutter GetIt: Um Guia Premium com Visual, Tabelas e Estrutura Completa
A criação de features em projetos Flutter cresce naturalmente em complexidade. Arquiteturas modulares exigem consistência: definir entidades, contratos, infraestruturas, módulos de injeção e páginas repetidamente pode consumir tempo e gerar inconsistências entre desenvolvedores.
Para resolver isso, construí um brick para o Mason que gera toda a estrutura necessária com um único comando, trazendo organização, agilidade e previsibilidade para equipes de qualquer tamanho.
Este guia premium explica como instalar, usar e compreender cada arquivo gerado, com um visual moderno ideal para publicação.
O que esse brick resolve?
Ele transforma um processo repetitivo e suscetível a erro em uma automação elegante, padronizada e escalável.
mason make flutter_getit_feature_brick name=productsVocê ganha uma feature completa com:
- Módulo pronto do flutter_getit
- Camada domain
- Camada Infrastructure
- Camada Presenation
- Entidades, Repositórios, Serviços e Usecases
- Modelos concretos
- Injeção de todas as dependências já prontas
Instalando o Mason
Primeiro você precisa ativar o Mason no seu flutter com o comando abaixo
dart pub global activate mason_cliDepois iniciar dentro do seu projeto com
mason initRegistra o seu brick no yaml que ele vai gerar
bricks:
flutter_getit_feature_brick:
path: ./bricks/flutter_getit_feature_brickDepois disso so precisa rodar
mason getAssim quando for gear uma nova feature com o comando abaixo o resultado sera em lib/src/features/login
mason make flutter_getit_feature_brick name=login
Visão geral da arquitetura gerada
| Camada | Responsabilidade |
|---|---|
| Presentation | UI, interação com usuário, telas iniciais. |
| Domain | Regras de negócio, contratos, entidades e casos de uso. |
| Infrastructure | Implementações concretas, APIs, models e acessos externos. |
| Injection Module | Registro no GetIt, ligação entre camadas. |
Essa divisão facilita testes, expansões, manutenção e substituição de dependências em qualquer momento.
lib/
└── src/
└── features/
└── {{name}}/
├── {{name}}_module.dart
├── presentation/
│ └── pages/
│ └── {{name}}_page.dart
├── domain/
│ ├── entities/
│ │ └── {{name}}.dart
│ ├── repositories/
│ │ └── {{name}}_repository.dart
│ ├── services/
│ │ └── {{name}}_service.dart
│ └── usecases/
│ └── {{name}}_usecase.dart
└── infrastructure/
├── models/
│ └── {{name}}_model.dart
├── repositories/
│ └── {{name}}_repository_impl.dart
└── services/
└── {{name}}_service.dart
Explicação visual arquivo por arquivo
A seguir você verá uma explicação premium, clara e visual de cada parte gerada.
1. {{name}}_module.dart — O Centro de Injeção de Dependências
| Função | Conectar todos os componentes da feature ao GetIt. |
|---|---|
| Conteúdo | Registros de repositórios, serviços, usecases e controladores. |
| Por que existe? | Remove acoplamento explícito e centraliza toda a configuração da feature. |
2. Presentation Layer — Interface com o Usuário
Arquivo: presentation/pages/{{name}}_page.dart
| Tipo | Tela inicial da feature |
|---|---|
| Objetivo | Exibir UI, interagir com usuário e chamar casos de uso |
| Dependências | Resolvidas automaticamente pelo módulo |
Este arquivo é o ponto onde fluxo visual de cada feature começa.
3. Domain Layer — A Regra de Negócio
A camada Domain é pura, testável e não depende de infraestrutura.
3.1 Entidade — domain/entities/{{name}}.dart
Representa o modelo central da feature.
| É dependente de API? | Não |
|---|---|
| É serializável? | Somente se modelado no Infrastructure Model |
| Papel | Conter dados fundamentais da feature |
3.2 Repositório — domain/repositories/{{name}}_repository.dart
Define o que deve ser feito, não como.
| Tipo | Classe abstrata |
|---|---|
| Função | Contratar operações que a feature suporta |
| Implementação | Fica na camada Infrastructure |
3.3 Serviço de domínio — domain/services/{{name}}_service.dart
Ideal para lógica complexa que não pertence diretamente ao caso de uso ou entidade.
3.4 Caso de Uso — domain/usecases/{{name}}_usecase.dart
A peça central da regra de negócio.
| Responsabilidade | Executar uma ação principal da feature |
|---|---|
| Exemplos | Buscar produtos, validar usuário, enviar formulários |
| Chamado por | Camada Presentation |
4. Infrastructure Layer — Implementação Concreta
A camada Infrastructure conecta o domínio ao “mundo real”.
4.1 Model — infrastructure/models/{{name}}_model.dart
Conversão entre API e entidades internas.
| Possui JSON parsing? | Sim |
|---|---|
| Extende entidade? | Geralmente, sim |
4.2 Repository Impl — infrastructure/repositories/{{name}}_repository_impl.dart
Aqui está o “como”.
| Implementa qual contrato? | {{name}}_repository |
|---|---|
| Função | Comunicar-se com API, banco local ou service |
| Chamado por | Caso de Uso |
4.3 Serviço externo — infrastructure/services/{{name}}_service.dart
Realiza operações externas reais como:
- requisições HTTP
- consultas locais
- integrações
Quando você gera uma feature, o Mason cria uma pasta completa dentro de lib/src/features. Dentro dela vivem três grandes camadas: Presentation, Domain e Infrastructure. O módulo da feature conecta tudo via GetIt. A Presentation mostra para o usuário. O Domain decide como as coisas funcionam. A Infrastructure conversa com o mundo externo.


