Aplicativo móvel desenvolvido em Flutter para conexão com o leitor RFID 🏷️
Projetado para se conectar a uma leitor RFID via Bluetooth Low Energy (BLE) para otimizar a contagem e inventário de produtos.
Siga estas instruções para obter uma cópia do projeto em funcionamento na sua máquina local para desenvolvimento e testes.
- Flutter SDK (versão 3.x ou superior)
- Um editor de código, como VS Code ou Android Studio
- Um dispositivo ou emulador Android
-
Clone o repositório:
git clone {repositório do ssrfid-app} cd ssrfid-app -
Instale as dependências:
flutter pub get
-
Configure as variáveis de ambiente: Crie um arquivo
.envna raiz do projeto, baseado no arquivo.env.example. Preencha com as informações necessárias. -
Gere os arquivos de rota: O projeto utiliza
auto_routepara navegação. Execute o seguinte comando para gerar os arquivos necessários:dart run build_runner build
-
Execute o aplicativo:
flutter run
O projeto segue uma arquitetura limpa, separando as responsabilidades em diferentes camadas:
lib/
├── app/
│ ├── bluetooth/ # Lógica de conexão Bluetooth e máquina de estados
│ ├── config/ # Configurações de API, dependências e variáveis de ambiente
│ ├── data/ # Repositórios e Data Transfer Objects (DTOs)
│ ├── domain/ # Entidades e abstrações de repositórios
│ ├── routing/ # Configuração de rotas (AutoRoute)
│ ├── ui/ # Widgets, páginas, providers (Riverpod) e temas
│ └── utils/ # Classes utilitárias (ex: logger)
└── main.dart # Ponto de entrada da aplicação
- Framework: Flutter
- Gerenciamento de Estado: Riverpod
- Navegação: AutoRoute
- Comunicação Bluetooth: flutter_blue_plus
- Requisições HTTP: http
- Componentes de UI: forui
- Injeção de Dependência: get_it
- Variáveis de Ambiente: flutter_dotenv
- Logging: logger
- Para manter uma transição mais suave entre telas com o mesmo estilo de
AppBar, optei por usarAutoTabsem vez deNavigator.push(), evitando o efeito padrão que troca toda a tela. Porém, como oAutoTabssimula a navegação, o botão nativo de voltar acaba fechando o app quando estamos em rotas internas. Resolvi isso usandoPopScopeeSystemNavigator.pop()no Android. No iOS, esse comportamento será diferente, pois o método não é suportado. Edit: acredito que personalizando a animação de troca de tela isso não seria necessário. No entanto, hoje essas telas também tem comportamentos compartilhados, então, caiu como luva. - Créditos do plano de fundo da tela inicial
stock.png: https://www.pexels.com/photo/red-and-white-plastic-containers-on-shelf-3992851/ + https://pinetools.com/blur-image no filtroStack Blure radius 100 + https://imgonline.tools/pt/darken com 15 de fator de escurecimento. - A troca do ícone da aplicação no IOS precisa de ajustes para ficar funcional. Também, devido a falta de hardware compatível, a versão IOS do aplicativo não foi testada.
flutter build apk --ofuscate --split-debug-info=/output