I. 📍 Visão Geral II. 👾 Funcionalidades III. 🏗️ Arquitetura IV. 📦 Pacotes V. 🎨 Design System VI. 📁 Estrutura do Projeto VII. 🚀 Começando VIII. 📌 Roadmap do Projeto IX. 🔰 Contribuindo X. 🎗 Licença XI. 🙌 Agradecimentos
O "Adote um Pet" é um aplicativo móvel baseado em Flutter projetado para facilitar o processo de adoção de animais de estimação. Ele oferece recursos como listagens de animais em tempo real, filtros de pesquisa fáceis de usar e formulários de adoção interativos. Voltado para futuros donos de animais e abrigos, este aplicativo simplifica a busca e adoção de pets, melhorando a experiência do usuário e aumentando as taxas de adoção.
Funcionalidade | Resumo | |
---|---|---|
🔐 | Autenticação |
|
🐕 | Busca de Pets |
|
💬 | Mensagens |
|
🎁 | Doações |
|
📱 | UI/UX |
|
O aplicativo segue os princípios da Clean Architecture combinada com MVVM (Model-View-ViewModel), proporcionando uma estrutura organizada e de fácil manutenção:
- Presentation: Contém pages (UI), viewmodels e state management usando Flutter Bloc
- Domain: Contém entidades de negócio, repositórios e casos de uso
- Data: Implementação de repositórios, datasources e modelos de dados
- Infrastructure: Configurações de DI, HTTP Client, interceptors e serviços
O aplicativo utiliza o padrão Service Locator implementado com o pacote GetIt para gerenciar suas dependências, possibilitando:
- Lazy loading de dependências quando necessário
- Injeção de dependências por feature
- Fácil substituição de implementações para testes
- Flutter Bloc: Para gerenciamento de estado reativo e fluxo de dados unidirecional
- Equatable: Para comparações eficientes de estado e igualdade de objetos
- Go Router: Navegação declarativa com suporte a rotas nomeadas e redirecionamentos
O projeto utiliza uma cuidadosa seleção de pacotes para otimizar o desenvolvimento:
- flutter_bloc: Gerenciamento de estado
- equatable: Comparações eficientes de estado
- go_router: Navegação
- get_it: Injeção de dependências
- dio: Cliente HTTP
- flutter_dotenv: Gerenciamento de variáveis de ambiente
- shared_preferences: Armazenamento local persistente
- design_system: Pacote local de design system
- gap: Espaçamento consistente
- flutter_masked_text2: Formatação de campos de texto
- logger: Log avançado para desenvolvimento
- lucid_validation: Validação de formulários
- result_dart: Tratamento elegante de resultados/erros
- image_picker: Seleção de imagens para uploads
O aplicativo implementa um design system personalizado como um pacote modular localizado em /design_system
, que inclui:
- Buttons: Botões primários e selecionáveis
- Drawer: Menu lateral personalizado com itens de navegação
- Inputs: Campos de texto com diferentes estilos
- Icons: Conjunto de ícones personalizado para a aplicação
- Cores: Paleta de cores consistente para toda a aplicação
- Tipografia: Família de fontes e tamanhos padronizados
- Espaçamento: Sistema de spacing consistente
- Imagens: Logo, imagens de animais e recursos visuais
- Ícones: Conjunto de ícones personalizados para navegação e UI
O design system garante uma interface consistente e coesa em todo o aplicativo, facilitando a manutenção e escalabilidade do design.
└── adote-um-pet-app/
├── lib/
│ ├── main.dart # Ponto de entrada do aplicativo
│ └── src/
│ ├── app_widget.dart # Widget principal do aplicativo
│ ├── routes.dart # Configuração de rotas com go_router
│ ├── app/ # Features específicas do domínio
│ │ └── features/
│ │ ├── auth/ # Feature de autenticação
│ │ ├── donate/ # Feature de doação
│ │ └── message/ # Feature de mensagens
│ └── core/ # Componentes core da aplicação
│ ├── DI/ # Injeção de dependências
│ ├── cache/ # Gerenciamento de cache
│ ├── client_http/ # Cliente HTTP e gerenciamento de requisições
│ ├── errors/ # Tratamento de erros
│ ├── features/ # Features do core (onboarding, etc)
│ ├── logger/ # Sistema de logging
│ ├── typedefs/ # Definição de tipos comuns
│ ├── usecase/ # Interfaces de casos de uso
│ └── utils/ # Utilitários e helpers
│
├── design_system/ # Pacote de design system
│ ├── lib/
│ │ ├── design_system.dart # Exportação do design system
│ │ └── src/
│ │ ├── buttons/ # Componentes de botões
│ │ ├── drawer/ # Componente de drawer
│ │ ├── icons/ # Ícones do app
│ │ ├── image/ # Componentes de imagem
│ │ ├── inputs/ # Componentes de input
│ │ └── theme/ # Definição de tema
│ └── assets/ # Recursos visuais do design system
│ ├── icons/ # Ícones
│ └── images/ # Imagens
│
├── assets/ # Recursos da aplicação principal
└── .env # Variáveis de ambiente
- Flutter SDK ^3.5.1
- Dart SDK ^3.5.1
- Um editor de código (VS Code, Android Studio, etc.)
- Clone o repositório:
git clone https://github.com/seu-usuario/adote-um-pet-app.git
cd adote-um-pet-app
- Crie um arquivo
.env
na raiz do projeto com as variáveis necessárias:
API_BASE_URL=https://sua-api.exemplo.com
- Instale as dependências:
flutter pub get
- Execute o aplicativo:
flutter run
wip
wip
wip
wip