7.2 KiB
7.2 KiB
Guia de Desenvolvimento e Manutenção
Setup do Ambiente
1. Pré-requisitos
# Instalar Flutter
flutter doctor
# Verificar ambiente
flutter devices
2. Clonar e Configurar
git clone <repository-url>
cd check_theeth_kids
flutter pub get
3. Configurar Firebase
- Baixar arquivos de configuração do console Firebase
- Adicionar
google-services.json(Android) eGoogleService-Info.plist(iOS)
Fluxo de Desenvolvimento
Branches
main: Produçãodevelop: Desenvolvimentofeature/*: Novas funcionalidadesbugfix/*: Correções de bugs
Comandos Diários
# Limpar e atualizar
flutter clean && flutter pub get
# Verificar código
flutter analyze
dart format .
# Rodar testes
flutter test
# Build para teste
flutter build apk --debug
Padrões de Código
1. BuildContext Seguro
// ✅ Correto
if (!mounted) return;
final result = await someAsyncOperation();
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(...);
// ❌ Incorreto
final result = await someAsyncOperation();
ScaffoldMessenger.of(context).showSnackBar(...); // Pode causar erro
2. Nomenclatura
// ✅ Descritivo
errorBuilder: (context, error, stackTrace) => ...
// ❌ Underscores desnecessários
errorBuilder: (context, _, __) => ...
3. Estruturas de Controle
// ✅ Com chaves
if (condition) {
return value;
}
// ❌ Sem chaves
if (condition)
return value;
Manutenção do Quiz
Adicionar Nova Pergunta
// Em lib/quiz/quiz1.dart
class Quiz21Screen extends StatelessWidget {
const Quiz21Screen({super.key, required this.currentScore, this.scopeId});
// ... implementação
@override
Widget build(BuildContext context) {
return QuizQuestionScreen(
title: 'Quiz 21/21',
question: 'Nova pergunta aqui...',
answers: const [
QuizAnswer(title: 'Opção 1', description: '...', weight: 2),
QuizAnswer(title: 'Opção 2', description: '...', weight: 5),
QuizAnswer(title: 'Opção 3', description: '...', weight: 3),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => QuizResultScreen(finalScore: nextScore, maxScore: 105, scopeId: scopeId),
),
isFinal: true,
showBackButton: true,
);
}
}
Atualizar Quiz Anterior
// No Quiz20Screen, atualizar nextRoute
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz21Screen(currentScore: nextScore, scopeId: scopeId),
),
Manutenção do logged_home.dart
Adicionar Nova Funcionalidade
- Criar widget específico
- Adicionar ao
_HomeTabStateou aba correspondente - Testar com diferentes estados
- Verificar lint
Corrigir Erros Comuns
# Verificar problemas
flutter analyze
# Corrigir automaticamente
dart fix --apply
Deploy
Android
# Build release
flutter build apk --release
# Upload para Play Store
# Usar Android Studio ou Google Play Console
iOS
# Build release
flutter build ios --release
# Upload para App Store
# Usar Xcode → Product → Archive
Web
# Build web
flutter build web
# Deploy para Firebase Hosting ou similar
firebase deploy --only hosting
Troubleshooting Comum
Firebase Issues
# Limpar cache do Firebase
flutter clean
cd android && ./gradlew clean && cd ..
cd ios && rm -rf Pods Podfile.lock && pod install && cd ..
Build Issues
# Limpar completamente
flutter clean
flutter pub cache repair
flutter pub get
Emulator Issues
# Limpar dados do emulador
flutter emulators --clean
flutter emulators --launch <emulator_id>
Performance
Monitoramento
// Usar Flutter DevTools
flutter run --profile
# Abrir: http://localhost:port/devtools/
Otimizações
- Usar
constwidgets onde possível - Evitar rebuilds desnecessários
- Usar
ListView.builderpara listas longas - Implementar lazy loading para imagens
Segurança
Firebase Rules
// Exemplo: firestore.rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
Best Practices
- Nunca expor API keys no código
- Validar dados no cliente e servidor
- Usar HTTPS para todas as comunicações
- Implementar rate limiting
Backup e Recuperação
Backup Automático
# Script de backup
#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czf "backup_$DATE.tar.gz" --exclude='.git' --exclude='build' .
Recuperação de Desastres
- Restaurar do backup mais recente
- Rodar
flutter pub get - Testar funcionalidades críticas
- Deploy para produção
Monitoramento
Logs e Erros
// Implementar logging
import 'dart:developer' as developer;
developer.log('Erro ao carregar dados', error: error);
Analytics
- Configurar Firebase Analytics
- Monitorar eventos importantes
- Acompanhar performance do app
Atualizações de Dependências
Processo Seguro
# Verificar atualizações
flutter pub outdated
# Atualizar uma por vez
flutter pub upgrade package_name
# Testar após cada atualização
flutter test
flutter analyze
Versões Críticas
- Firebase: Verificar breaking changes
- Flutter: Aguardar estabilidade antes de atualizar
- Packages: Verificar compatibilidade
Documentação
Manter Documentação Atualizada
- Atualizar README.md após mudanças significativas
- Documentar novas funcionalidades
- Manter changelog
Code Comments
/// Widget principal do quiz com 20 perguntas
///
/// Responsável por gerenciar o fluxo completo do quiz,
/// desde a primeira pergunta até o resultado final.
class Quiz1Screen extends StatelessWidget {
// ...
}
Testes
Unit Tests
// test/quiz_test.dart
void main() {
test('Quiz calculation should work correctly', () {
// Implementar testes
});
}
Integration Tests
// integration_test/app_test.dart
void main() {
testWidgets('Quiz flow smoke test', (WidgetTester tester) async {
// Testar fluxo completo
});
}
Contato e Suporte
Equipe de Desenvolvimento
- Desenvolvedor Principal: [Nome]
- Firebase Admin: [Nome]
- UI/UX Designer: [Nome]
Recursos Externos
Checklist de Release
Antes do Deploy
flutter analyzesem erros- Todos os testes passando
- Versão atualizada no pubspec.yaml
- Changelog atualizado
- Backup criado
- Testado em múltiplos dispositivos
- Performance verificada
- Segurança revisada
Pós-Deploy
- Monitorar logs de erro
- Verificar analytics
- Coletar feedback dos usuários
- Preparar hotfix se necessário
Conclusão
Este guia serve como referência para desenvolvimento e manutenção contínua do projeto. Siga os padrões estabelecidos para garantir qualidade e consistência no código.
Para dúvidas ou sugestões de melhoria deste guia, consulte a equipe de desenvolvimento.