Aplicativo mobile para precificação de produtos e gestão de pedidos da Erika Precifica.
- Flutter: 3.24.3 (gerenciado via FVM)
- Dart SDK: >=3.4.3 <4.0.0
- Android Min SDK: 21 (Android 5.0)
- Android Target SDK: 35
- iOS: 12.0+
# Instalar FVM
dart pub global activate fvm
# Instalar a versão do Flutter do projeto
fvm install
# Usar a versão do projeto
fvm usegit clone https://github.com/dpossas/precifikapp.git
cd precifikappfvm flutter pub getO projeto utiliza Firebase com configurações separadas para dev e prod.
Solicitar acesso ao projeto Firebase:
- Projeto:
erika-precifica - Solicitar acesso ao administrador do projeto Firebase Console
Os arquivos de configuração já estão no repositório:
- Dev:
.firebase/dev/google-services.json - Prod:
.firebase/prod/google-services.json
# Desenvolvimento
fvm flutter run --flavor dev -t lib/main_dev.dart
# Produção
fvm flutter run --flavor prod -t lib/main_prod.dart# APK Dev
fvm flutter build apk --flavor dev -t lib/main_dev.dart
# APK Prod
fvm flutter build apk --flavor prod -t lib/main_prod.dart
# App Bundle Prod (para Play Store)
fvm flutter build appbundle --flavor prod -t lib/main_prod.dart# Dev
fvm flutter build ios --flavor dev -t lib/main_dev.dart
# Prod
fvm flutter build ios --flavor prod -t lib/main_prod.dartO projeto segue Clean Architecture com Repository Pattern:
lib/
├── main.dart # Inicialização compartilhada
├── main_dev.dart # Entry point - Dev
├── main_prod.dart # Entry point - Prod
├── app.dart # Widget raiz com configuração de rotas
├── flavors.dart # Configuração de flavors (URLs, etc)
│
├── core/ # Núcleo da aplicação
│ ├── injections/ # Dependency Injection (GetIt)
│ ├── routes/ # Navegação (GoRouter)
│ ├── http/ # Cliente HTTP (Dio) e interceptors
│ ├── exceptions/ # Exceções customizadas
│ ├── theme/ # Tema e estilos
│ ├── validators/ # Validadores de input
│ ├── extensions/ # Extensions Dart
│ ├── consts/ # Cores, ícones, imagens
│ └── masks/ # Máscaras de input
│
├── models/ # Modelos de dados
├── enums/ # Enums (Feature, Premium, etc)
├── services/ # Serviços de infraestrutura
├── repository/ # Camada de acesso a dados
├── controller/ # Lógica de negócio
│
└── view/ # Interface do usuário
├── auth/ # Login, registro, recuperação
├── home/ # Dashboard principal
├── order/ # Pedidos
├── recipe/ # Receitas/Produtos
├── ingredient/ # Ingredientes
├── budget/ # Orçamentos
├── client/ # Clientes
├── fee/ # Taxas
├── profile/ # Perfil do usuário
├── menu/ # Menu lateral
├── subscription/ # Assinaturas/Premium
└── components/ # Componentes reutilizáveis
O projeto utiliza RxNotifier para gerenciamento de estado reativo:
// Declaração de estado
RxNotifier<List<Order>> orders = RxNotifier([]);
RxNotifier<bool> loading = RxNotifier(true);
// Atualização
orders.value = newOrders;
loading.value = false;
// Na UI - rebuild automático
RxBuilder(
builder: (_) => loading.value
? CircularProgressIndicator()
: OrderList(orders: orders.value),
)Utiliza GetIt como Service Locator:
// Registrar
di.registerLazySingleton<IAuthRepository>(() => AuthRepository());
di.registerFactory<IAuthController>(() => AuthController());
// Usar
final authController = di.get<IAuthController>();Todos os controllers implementam interfaces:
// Interface
abstract class IOrderController {
RxNotifier<List<Order>> get orders;
Future<void> loadOrders();
}
// Implementação
class OrderController implements IOrderController {
final IOrderRepository _repository;
@override
RxNotifier<List<Order>> orders = RxNotifier([]);
@override
Future<void> loadOrders() async {
orders.value = await _repository.getOrders();
}
}Repositories estendem BaseRepository:
class OrderRepository extends BaseRepository implements IOrderRepository {
@override
Future<List<Order>> getOrders() async {
final response = await dio.get('API/Orders');
return (response.data as List).map((e) => Order.fromJson(e)).toList();
}
}Utiliza GoRouter para navegação declarativa:
// Navegar
context.go('/orders');
context.push('/orders/123');
// Com parâmetros
context.goNamed('orderDetail', pathParameters: {'id': '123'});| Flavor | Package ID | API Base URL |
|---|---|---|
| dev | br.com.erikaprecifica.precifikapp.dev |
https://qa.erikaprecifica.com.br/ |
| prod | br.com.erikaprecifica.precifikapp |
https://erikaprecifica.com.br/ |
Configuração em lib/flavors.dart.
| Endpoint | Descrição |
|---|---|
API/Login |
Autenticação |
API/LoginReset |
Recuperação de senha |
API/Customer |
Dados do usuário |
API/Product |
Produtos/Receitas |
API/Orders |
Pedidos |
API/Clients |
Clientes |
API/Stock |
Ingredientes/Estoque |
API/Taxes |
Taxas |
API/ResumeDashboard |
Resumo do dashboard |
API/SalesChart |
Dados de vendas |
API/TopProductsSales |
Produtos mais vendidos |
Flags de configuração remota:
| Chave | Descrição |
|---|---|
subscription_feature_enabled |
Habilita sistema de assinatura |
review_build_number_ios |
Build para bypass de review iOS |
review_build_number_android |
Build para bypass de review Android |
admin_whitelist_emails |
Emails com acesso admin (CSV) |
allowed_build_numbers |
Builds permitidos |
whatsapp_support_phone |
Telefone do suporte WhatsApp |
store_links |
Links das lojas (redirect) |
dio- Cliente HTTPdio_cookie_manager- Gerenciamento de cookiespretty_dio_logger- Log de requisições
firebase_core- Corefirebase_analytics- Analyticsfirebase_crashlytics- Crash reportsfirebase_messaging- Push notificationsfirebase_remote_config- Feature flagsfirebase_performance- Monitoramento
rx_notifier- State management reativoget_it- Dependency injectiongo_router- Navegação
flutter_secure_storage- Armazenamento segurolocal_auth- Autenticação biométrica
flutter_svg- SVGscached_network_image- Cache de imagensflutter_charts- Gráficos
cpf_cnpj_validator- Validação CPF/CNPJemail_validator- Validação emailextended_masked_text- Máscaras de textocurrency_text_input_formatter- Formatação monetária
- Usuário submete email/senha
AuthRepository.doLogin()faz POST emAPI/Login- Servidor retorna objeto
Usercom token - User armazenado via
SecureStorageService - Cookies persistidos em
$appDocDir/.cookies/
O interceptor adiciona automaticamente:
device-model- Modelo do dispositivoversion-app- Versão do appuserSystemId- ID do usuáriodeviceId- ID do dispositivodeviceGMT- Timezone
- Free - Gratuito
- Essential - Essencial
- Intermediate - Intermediário
- Professional - Profissional
- Total - Completo
Features são controladas pelo enum Feature e verificadas via PremiumService.
- Crashlytics com identificação de usuário
- Proteção contra screenshots em telas sensíveis (
no_screenshot) - Armazenamento seguro com criptografia
- Autenticação biométrica opcional
assets/
├── images/ # Imagens PNG/JPG
├── icons/ # Ícones SVG
└── fonts/ # Fontes customizadas
# Instalar dependências
fvm flutter pub get
# Gerar código (freezed, json_serializable, etc)
fvm flutter pub run build_runner build --delete-conflicting-outputs
# Limpar build
fvm flutter clean
# Analisar código
fvm flutter analyze
# Rodar testes
fvm flutter test
# Atualizar ícones do app
fvm flutter pub run flutter_launcher_icons
# Atualizar splash screen
fvm flutter pub run flutter_native_splash:create
# Regenerar flavors
fvm flutter pub run flutter_flavorizrPara desenvolver no projeto, solicite acesso a:
- GitHub - Repositório
dpossas/precifikapp - Firebase Console - Projeto
erika-precifica - Figma - Design do aplicativo
Para dúvidas sobre o projeto, entre em contato com o administrador do repositório.