README
Tesouro Espiritual - Congregação Mariana
Um app para facilitar a contagem de tesouros, permitindo ao Padre Diretor ter uma noção de como está a vida espiritual dos membros e acompanhar seus avanços e dificuldades no caminho para a eternidade.
Desafios
O App visa não ter custos com licenciamento, ou seja, publicar nas lojas Play Store e App Store sem custos adicionais. Para isso, utilizamos ferramentas de desenvolvimento no plano gratuito (Vercel e Firebase Spark). O ciclo de vida do app foi implementado de maneira a ser fácil de manter e escalável para ser acessível a outras congregações.
O sistema é estável graças ao uso do Firestore Firebase, proporcionando uma distribuição fácil e confiável, com baixa latência e conformidade com as normas do LGPD e GDPR. A escolha foi baseada na necessidade de um banco de dados NoSQL, já que o Supabase ainda não atendia a esse critério e enfrentava problemas de segurança de dados no momento da escolha.
A contagem geral dos tesouros para definir a saúde da congregação foi um desafio significativo. Lidando com um banco de dados não relacional, implementamos regras para melhor uso da filtragem geral, suportadas pelo Firebase com dados massivos.
Arquitetura do Projeto
Desenvolvi o projeto usando Flutter na versão 3.13.9. Adotei uma abordagem simplificada para todas as funcionalidades do projeto, onde cada tela representa um módulo. Para gerenciamento de estado, utilizei o BloC. Na versão 2.0 do app, implementarei injeção de dependência para facilitar a escalabilidade e a manutenção futura, além de permitir o uso de outros tipos de banco de dados.
Para evitar dependência excessiva de pacotes externos e lidar com problemas de versão do Flutter, implementei funcionalidades como cache, repositórios e validação de campos de login na pasta package. A migração para a nova versão do Flutter Web está em segundo plano para permitir a execução em WebAssembly (WASM), melhorando a performance e o carregamento nativo.
Utilizei o DeferredWidget para lidar com o carregamento em cache, permitindo menor latência na web. Isso divide o app em partes menores, carregadas conforme necessário.
A implementação é feita da seguinte maneira:
O DeferredWidget no código é um widget Flutter projetado para carregar dinamicamente uma biblioteca (ou módulo) quando necessário e exibir um widget associado a essa biblioteca após o carregamento. Ele é útil quando você deseja dividir seu aplicativo em partes menores (bibliotecas ou módulos) que são carregadas apenas quando necessário, economizando recursos e melhorando o desempenho inicial do aplicativo.
Recursos como notificações push e analytics foram implementados na parte nativa da web, explorando recursos de cache, splash em CSS, bloqueio de modo desenvolvedor, metadados, e geração de PDF para salvar documentos gerados. Cada usuário tem um UUID gerado com 528 bits, garantindo uma taxa de colisão extremamente baixa de (2^{528}).
Funcionalidades
Nota: O tesouro é um agrupamento de 14 itens para preenchimento mensal. O Tesouro Espiritual é um recurso usado pelas Congregações para contabilizar atos de piedade realizados ao longo do mês.
Login
Criar usuário
Recuperação de senha
Gerar PDF do tesouro mensal
Visualização do tesouro mensal, individual e da igreja
Marcação do tesouro
Escolher mês e dia para preenchimento do tesouro
Notificações diárias às 21h
Contagem geral dos membros por mês
Recurso para redirecionamento ao site principal salvemaria.com.br
Seção sobre com informações e FAQ
Visualização de licenças usadas
Console no Firebase para publicar notificações, bloquear/desbloquear usuários, recuperação de senha e confirmação de criação de conta
Design
Desenvolvi com base no Material Design 3 e todos os tipos de animações nativas do Flutter. Inclui acessibilidade para todos os botões com suporte a TalkBack e VoiceOver, além de responsividade para qualquer plataforma.
Arquitetura
Arquitetura do projeto
Definição de cada feature/modulo
Melhorias Futuras
Implementação de injeção de dependência
Exploração dos conceitos de SOLID e Clean Dart
Migração para WebAssembly
Implementação de testes unitários com cobertura acima de 80%
Implementação de testes de widget
Ciclo de melhoria contínua voltado para testes
Desacoplamento do design system do Material Design
Desacoplamento do app do Firebase
Uso de feature flags
Notificações push para dias não marcados
Novas formas de distribuição PWA
Adição de recursos de analytics
Melhoria na integração com web
Esconder variáveis de ambiente na Vercel
Segurança
Por questões de segurança, apenas o domínio principal está configurado para funcionar no Firebase, impedindo o uso indevido do banco de dados e da autenticação. Essa configuração é feita via console do Firebase.
Deploy
Cada nova versão é criada a partir da branch main. Novos recursos, correções e releases são desenvolvidos em branches separadas, respeitando boas práticas de engenharia de software. As configurações do projeto estão visíveis no line command
firebase.json, definindo as regras de acesso ao banco de dados e os recursos que precisam ser carregados. Na versão 2.0, planejo ajustar as branches para evitar conflitos na main.
Build Command:
flutter/bin/flutter build web --releaseOutput Directory:
build/webDevelopment Command:
Console Firebase
Vercel Console
Push Notifications
Instalação
Para instalar o APP Tesouro:
Nota: Recomendo o uso do Puro para gerenciamento de versão do Flutter. Versão do Flutter: 3.13.9
Design do app [Telas]
Versão 1.0.0 do app
Last updated