Mobile - Stack Esperada¶
Stack Atual¶
Core¶
- Expo ~54.0.25 - Framework para React Native
- React Native 0.81.5 - Framework mobile
- React 19.1.0 - Biblioteca UI
- TypeScript ~5.9.2 - Tipagem estática
Navegação¶
- @react-navigation/native 6.1.9 - Navegação base
- @react-navigation/native-stack 6.9.17 - Stack navigator
- @react-navigation/bottom-tabs 6.5.11 - Tab navigator
Estado e Dados¶
- @tanstack/react-query 5.12.0 - Gerenciamento de estado de servidor
- axios 1.6.2 - Cliente HTTP
Formulários¶
- react-hook-form 7.48.2 - Gerenciamento de formulários
- zod 3.22.4 - Validação de schemas
- @hookform/resolvers 3.3.2 - Integração React Hook Form + Zod
Armazenamento¶
- expo-secure-store ~15.0.7 - Armazenamento seguro (tokens)
Utilitários¶
- expo-constants ~18.0.10 - Constantes do Expo
- expo-linking ~8.0.9 - Deep linking
- expo-status-bar ~3.0.8 - Barra de status
Organização das Pastas¶
billings-ease-mobile/
├── src/
│ ├── components/ # Componentes reutilizáveis
│ ├── contexts/ # Context API
│ │ └── AuthContext.tsx
│ ├── navigation/ # Configuração de navegação
│ │ ├── AppNavigator.tsx
│ │ ├── MainTabs.tsx
│ │ └── types.ts
│ ├── pages/ # Telas do aplicativo
│ │ ├── auth/
│ │ ├── cycles/
│ │ ├── dashboard/
│ │ └── ...
│ ├── services/ # Serviços
│ │ └── api.ts # Cliente Axios
│ └── types/ # Definições TypeScript
│ └── index.ts
├── App.tsx # Componente raiz
├── app.json # Configuração do Expo
└── package.json
Responsabilidades do Mobile¶
✅ O que o Mobile Faz¶
- Interface Mobile-First
- Telas otimizadas para mobile
- Gestos e interações touch
-
Navegação nativa
-
Registro Diário
- Interface rápida para registro de observações
- Seleção de símbolos, sensações, aparências
-
Validação de formato (não regras de negócio)
-
Visualização de Dados
- Dashboard com status de fertilidade
- Gráficos e visualizações de ciclos
-
Histórico de observações
-
Sincronização
- Push de dados locais para servidor
- Pull de atualizações do servidor
-
Resolução de conflitos (futuro)
-
Armazenamento Local
- Cache de dados para uso offline
- Armazenamento seguro de tokens
❌ O que o Mobile NÃO Faz¶
- Regras de Negócio
- ❌ Não calcula status de fertilidade
- ❌ Não valida regras do Método Billings
- ❌ Não determina símbolos permitidos
-
Tudo via API do backend
-
Acesso Direto a Dados
- ❌ Não acessa banco de dados
- ❌ Tudo via API REST
Restrições Técnicas¶
Expo¶
Limitações: - Não pode usar módulos nativos não suportados pelo Expo - Algumas funcionalidades requerem EAS Build (custom native code)
Vantagens: - Desenvolvimento rápido - Over-the-air updates - Build simplificado
React Native¶
Considerações: - Performance diferente do web - Listas grandes precisam de otimização (FlatList) - Imagens precisam de cache
Armazenamento¶
Expo Secure Store: - Limitado a pequenos dados (tokens, credenciais) - Não é adequado para grandes volumes de dados
Para dados maiores: - Considerar AsyncStorage (dados não sensíveis) - Considerar SQLite (dados estruturados, futuro)
Configuração¶
Variáveis de Ambiente¶
Arquivo: .env (não versionado)
Variáveis:
- EXPO_PUBLIC_API_URL - URL completa do backend
Uso:
const API_BASE_URL = process.env.EXPO_PUBLIC_API_URL || 'http://localhost:8080/api'
Execução¶
Desenvolvimento:
yarn start
# ou
expo start
Android:
yarn android
iOS:
yarn ios
Web:
yarn web
Navegação¶
Estrutura¶
AppNavigator (Stack)
├── AuthStack (não autenticado)
│ ├── Login
│ ├── Register
│ └── ForgotPassword
└── MainTabs (autenticado)
├── Dashboard
├── Cycles
├── DailyRegister
└── Profile
Tipos de Navegação¶
Stack Navigator: - Navegação hierárquica - Header automático - Gestos nativos
Tab Navigator: - Navegação por abas - Ícones e labels - Estado persistente