Aplicativo móvel para gerenciamento de acesso por meio de fechadura biométrica, permitindo controle seguro e eficiente de acessos a ambientes restritos.
O BioSafe é uma solução para controle de acesso utilizando biometria. O sistema foi projetado para aumentar a segurança e monitoramento de diferentes locais e pontos de acesso. O App BioSafe foi criado com objetivo de melhorar a experiência do usuário e oferecer maior controle sobre o acesso.
- Monitoramento em Tempo Real: Visualização do estado atual da fechadura (aberta/fechada)
- Histórico de Acessos: Registro de todas as tentativas de acesso, bem-sucedidas ou não
- Gerenciamento de Usuários: Cadastro de usuários com diferentes níveis de acesso
- Abertura Remota: Possibilidade de abrir a fechadura remotamente através do aplicativo
- Flutter (versão 3.0 ou superior)
- Dart (versão 2.17 ou superior)
- Conexão com o mesmo WiFi do servidor Node-RED
-
Clone o repositório:
git clone https://github.com/seu-usuario/biosafe_app.git cd biosafe_app -
Instale as dependências:
flutter pub get
-
Configure o arquivo de host:
Abra o arquivo
lib/config/app_config.darte altere o endereço IP para o da sua máquina onde o servidor Node-RED está sendo executado:class AppConfig { static const String host = '192.168.1.12'; // Altere para o IP da sua máquina static const int mqttPort = 1883; static const int httpPort = 1880; // ... }
IMPORTANTE: O dispositivo que estiver executando o aplicativo precisa estar na mesma rede WiFi do servidor Node-RED para que a comunicação funcione corretamente.
-
Execute o aplicativo:
flutter run
O aplicativo BioSafe foi construído utilizando Flutter e segue uma arquitetura de camadas bem definida para facilitar a manutenção, testabilidade e escalabilidade do código:
-
Apresentação (UI)
- Organizado em pages (home, users, create)
- Utiliza StatefulWidgets para gerenciar estado local
-
Gerenciamento de Estado
- Implementa o padrão Store para centralizar e gerenciar estados
- Usa ValueNotifier para reatividade e atualizações da UI
- Cada módulo possui sua própria store independente
-
Repositórios
- Implementa interfaces bem definidas (ILockRepository)
- Responsável pela comunicação com fontes de dados externas
- Isolado da camada de apresentação por meio de injeção de dependências
-
Serviços
- HttpClient encapsula requisições HTTP
- Serviço MQTT para comunicação em tempo real
- Isolamento de responsabilidades para facilitar testes
-
Modelo de Dados
- Classes de modelo para representação dos dados (LockStateModel, UserModel)
- Métodos de serialização/deserialização JSON
- Validação de dados
A organização do código do aplicativo BioSafe segue uma estrutura modular e de fácil manutenção:
lib/ # Código-fonte principal do aplicativo
├── main.dart # Ponto de entrada do aplicativo
├── config/ # Configurações da aplicação
│ └── app_config.dart # Constantes e configurações (endereços IP, portas, etc.)
├── data/ # Camada de dados
│ ├── http/ # Cliente HTTP para requisições à API
│ │ └── http_client.dart
│ ├── model/ # Modelos de dados
│ │ ├── lock_state_model.dart
│ │ └── user_model.dart
│ └── repository/ # Repositórios para acesso aos dados
│ ├── lock_repository.dart
│ └── user_repository.dart
└── pages/ # Interfaces de usuário (UI)
├── main_screen.dart # Tela principal com navegação
├── home/ # Módulo da tela inicial
│ ├── home_page.dart # Página inicial do aplicativo
│ └── stores/ # Gerenciamento de estado da tela inicial
├── users/ # Módulo de gerenciamento de usuários
│ ├── users_page.dart # Lista de usuários cadastrados
│ └── stores/
└── create/ # Módulo para criação
├── create_page.dart # Formulário para cadastro
└── stores/
Cada módulo do aplicativo (home, users, create) segue uma estrutura consistente contendo:
- Arquivo principal da página (UI)
- Pasta stores para gerenciamento de estado
- Injeção de Dependência: Componentes recebem suas dependências de fora
- Repository Pattern: Abstrai a fonte de dados da lógica de negócio
- Observer Pattern: Implementado através de ValueNotifier para atualizações reativas
- Factory Method: Para criação de objetos modelo a partir de dados JSON
- HTTP: Para operações CRUD e obtenção de dados históricos
- MQTT: Para comunicação em tempo real sobre o estado da fechadura
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.
Este projeto está licenciado sob a Licença MIT.
