Este documento apresenta uma visão geral da arquitetura utilizada neste aplicativo e oferece um tutorial passo a passo para que novos desenvolvedores possam dar manutenção no sistema facilmente.
O app segue uma arquitetura modular inspirada na Clean Architecture, integrando o padrão Bloc/Cubit para o gerenciamento de estado. Essa abordagem permite que cada módulo opere de forma independente, promovendo escalabilidade, manutenção facilitada e testes mais robustos. As rotas são gerenciadas centralmente, garantindo uma navegação organizada em toda a aplicação.
A estrutura do projeto é a seguinte:
├── app_providers.dart
├── app_router.dart
├── app_widget.dart
├── main.dart
└── modules
└── featurexpt_module
├── featurexpt_module.dart
├── data
│ └── featurexpt_repository.dart
├── domain
│ ├── entities
│ │ └── featurexpt_entity.dart
│ └── use_cases
│ └── get_featurexpt_use_case.dart
└── presentation
├── featurexpt_details
│ ├── cubit
│ │ ├── featurexpt_details_cubit.dart
│ │ └── featurexpt_details_state.dart
│ └── featurexpt_details_page.dart
└── featurexpt_list_page
├── cubit
│ ├── featurexpt_list_cubit.dart
│ └── featurexpt_list_state.dart
└── featurexpt_list_page.dart
Antes de executar este projeto localmente, certifique-se de que você possui os seguintes requisitos instalados:
-
Flutter SDK:
- Certifique-se de que o Flutter está instalado e configurado corretamente.
- Versão mínima recomendada:
3.7.2. - Guia de instalação do Flutter.
-
Dart SDK:
- Incluído com o Flutter, mas certifique-se de que está atualizado.
-
Editor de Código:
- Recomendado: Visual Studio Code com as extensões:
- Flutter
- Dart
- Recomendado: Visual Studio Code com as extensões:
-
Dispositivo para Execução:
- Emulador Android/iOS configurado ou dispositivo físico conectado.
- Certifique-se de que o dispositivo tem as permissões necessárias para depuração.
-
Dependências do Projeto:
- Execute o comando abaixo para instalar as dependências do projeto:
flutter pub get
- Execute o comando abaixo para instalar as dependências do projeto:
-
Outros Requisitos:
- Certifique-se de que o ambiente de desenvolvimento possui as ferramentas necessárias para compilar o código, como:
- Android Studio (para configurar o SDK do Android e emuladores).
- Xcode (para desenvolvimento em iOS, apenas em macOS).
- Certifique-se de que o ambiente de desenvolvimento possui as ferramentas necessárias para compilar o código, como:
Após garantir que todos os requisitos estão atendidos, siga as instruções abaixo para executar o projeto.
- Crie uma nova pasta dentro de
/modulescom o nome do módulo desejado. No exemplo acima, featurexpt. - Dentro da nova pasta, crie as seguintes subpastas e arquivos conforme necessário:
- Módulo principal: {nome_module}.dart
- data: para repositórios e fontes de dados.
- domain:
- entities: para as entidades do módulo.
- use_cases: para as regras de negócio e lógica.
- presentation: para telas e gerenciamento de estado.
- Se a página necessitar de Cubit/Bloc, crie uma subpasta (ex.: "home_details") com os arquivos do Cubit/Bloc e a página.
- Utilize os módulos existentes (fruit_module, animals_module e home_module) como referência.
- Abra o arquivo
app_router.dart. - Adicione a nova rota no mapeamento, definindo o caminho (ex.:
/novoModulo) e associando-a à página principal do módulo. - Certifique-se de que a nova rota esteja registrada e importada corretamente em todas as configurações necessárias.
- Crie a nova página na pasta apropriada dentro de
presentationdo módulo em questão. - Para componentes reutilizáveis que não pertencem a um módulo específico, crie-os em uma pasta compartilhada (ou em uma nova pasta, se aplicável) e importe onde necessário.
- Se a página requer gerenciamento de estado, crie um novo Cubit/Bloc e vincule-o à página existente.
- Use Cases:
- Tem o objetivo principal de centralizar as regras de negócio.
Crie os arquivos de lógica de negócio na subpasta
use_casesdo módulo correspondente. - Siga a estrutura e o padrão dos casos de uso já existentes, garantindo que cada use case encapsule uma ação específica do domínio.
- Tem o objetivo principal de centralizar as regras de negócio.
Crie os arquivos de lógica de negócio na subpasta
- Entidades:
- Adicione ou modifique os modelos de dados na pasta
entitiesdo módulo. - As entidades devem representar os objetos centrais do domínio e serem simples, seguindo o conceito de "Plain Old Dart Objects" (PODO) ou Classes anêmicas.
- Adicione ou modifique os modelos de dados na pasta
- Repositórios:
- Implemente a comunicação com fontes de dados na pasta
data. - Garanta que os repositórios sigam a abstração dos demais módulos, facilitando a troca ou modificação da fonte de dados com mínimo impacto.
- Evite colocar regras de negócio nesta camada, faça com que o único objetivo de cada método do repositório seja obter dados e repassá-los.
- Implemente a comunicação com fontes de dados na pasta