💡Flutter Leap Monorepo
O Flutter Leap, é um repositório base que mantemos, contendo a arquitetura de pastas propostas para os nossos projetos, as libs que utilizamos com frequência, alguns componentes e funcionalidades.
Architecture overview
Temos aqui uma imagem explicando através de um diagrama o uso da arquitetura que temos atualmente no nosso projeto leap quando desejamos desenvolver um projeto monorepo, separando por micro-apps cada funcionalidade desejada, desde a separação de pastas e lógica, conexão com API e a build de CI/CD.

Descrição técnica
O diagrama apresenta uma arquitetura de projeto Flutter organizada em um monorepo, promovendo o compartilhamento de código e a modularização. A estrutura é dividida em várias partes:
BASE_APP: É o ponto de entrada do aplicativo Flutter, responsável apenas pela inicialização do aplicativo com a função runApp, delegando a construção da UI para o core_app.
SHARED:
commons: Contém lógica e modelos de domínio compartilhados por toda a aplicação, como entidades e regras de negócio comuns, componentes, helpers, interfaces, cores, fontes.
common_dependencies: Centraliza e exporta bibliotecas e dependências externas, simplificando a gestão e atualização das mesmas.
CORE: Funciona como núcleo de integração, estabelecendo as rotas principais e contendo a configuração do MaterialApp(). Este módulo é crucial para a navegação e comunicação entre o BASE_APP e os módulos individuais.
MODULES: Os módulos funcionam como unidades autocontidas que encapsulam funcionalidades específicas do aplicativo. Cada módulo é estruturado seguindo os princípios da Clean Architecture, o que garante separação de responsabilidades e facilita a manutenção e teste do código. Dentro de cada módulo, encontram-se as seguintes camadas:
Presenter: Contém a lógica de apresentação, como 'PAGES' e 'COMPONENTS', e 'STORES' para gerenciamento de estado.
Domain: Define as regras de negócio através de 'USECASES' e entidades de negócio.
Infra: Inclui 'DATASOURCES' e 'REPOSITORIES' que implementam a interação com sistemas externos e a persistência de dados.
Módulos como module_auth e module_home contêm essas camadas, e cada um é responsável por um segmento distinto de funcionalidades, como autenticação e apresentação da tela inicial, respectivamente. A modularização promove um desenvolvimento ágil e a possibilidade de expansão futura sem comprometer a base de código existente.
Essa arquitetura escolhida foi baseada na arquitetura monorepo proposta pelo Toshi Ossada, se baseando na Clean Dart e também em experiências em outras tecnologias.
Para quem quiser entender melhor a divisão de pastas e funcionamento, aconselho a leitura: https://blog.flutterando.com.br/micro-frontends-criando-aplicativos-mais-profissionais-com-o-modular-43eba2264dbe
Você pode encontrara documentação da Clean Dart aqui: https://github.com/Flutterando/Clean-Dart
Veja como melhorar a produtividade ao criar novos módulos em:
🧱Mason - Generate ModulesLast updated