Skip to content

Instantly share code, notes, and snippets.

@dpossas
Created December 17, 2025 13:40
Show Gist options
  • Select an option

  • Save dpossas/e4e55a51573c035a10976f27b1d10a73 to your computer and use it in GitHub Desktop.

Select an option

Save dpossas/e4e55a51573c035a10976f27b1d10a73 to your computer and use it in GitHub Desktop.
Precifikapp - Detalhes técnicos

Precifikapp

Aplicativo mobile para precificação de produtos e gestão de pedidos da Erika Precifica.

Links Importantes

Recurso URL
Repositório https://github.com/dpossas/precifikapp
Figma https://www.figma.com/design/IqzPZIibYr4ns7NvJhzWUf/APP-Precifika?node-id=1872-43603&p=f&t=qxJ5nmljHqtIme5P-0
API Dev https://qa.erikaprecifica.com.br/
API Prod https://erikaprecifica.com.br/

Requisitos

  • 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+

Instalação do FVM

# Instalar FVM
dart pub global activate fvm

# Instalar a versão do Flutter do projeto
fvm install

# Usar a versão do projeto
fvm use

Configuração do Ambiente

1. Clonar o repositório

git clone https://github.com/dpossas/precifikapp.git
cd precifikapp

2. Instalar dependências

fvm flutter pub get

3. Configurar Firebase

O 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

4. Executar o aplicativo

# Desenvolvimento
fvm flutter run --flavor dev -t lib/main_dev.dart

# Produção
fvm flutter run --flavor prod -t lib/main_prod.dart

Build & Release

Android

# 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

iOS

# Dev
fvm flutter build ios --flavor dev -t lib/main_dev.dart

# Prod
fvm flutter build ios --flavor prod -t lib/main_prod.dart

Arquitetura do Projeto

O 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

Padrões e Convenções

State Management

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),
)

Dependency Injection

Utiliza GetIt como Service Locator:

// Registrar
di.registerLazySingleton<IAuthRepository>(() => AuthRepository());
di.registerFactory<IAuthController>(() => AuthController());

// Usar
final authController = di.get<IAuthController>();

Estrutura de Controllers

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();
  }
}

Estrutura de Repositories

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();
  }
}

Navegação

Utiliza GoRouter para navegação declarativa:

// Navegar
context.go('/orders');
context.push('/orders/123');

// Com parâmetros
context.goNamed('orderDetail', pathParameters: {'id': '123'});

Flavors (Ambientes)

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.


Endpoints da API

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

Firebase Remote Config

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)

Dependências Principais

HTTP & Networking

  • dio - Cliente HTTP
  • dio_cookie_manager - Gerenciamento de cookies
  • pretty_dio_logger - Log de requisições

Firebase

  • firebase_core - Core
  • firebase_analytics - Analytics
  • firebase_crashlytics - Crash reports
  • firebase_messaging - Push notifications
  • firebase_remote_config - Feature flags
  • firebase_performance - Monitoramento

State & DI

  • rx_notifier - State management reativo
  • get_it - Dependency injection
  • go_router - Navegação

Storage & Security

  • flutter_secure_storage - Armazenamento seguro
  • local_auth - Autenticação biométrica

UI

  • flutter_svg - SVGs
  • cached_network_image - Cache de imagens
  • flutter_charts - Gráficos

Validação & Formatação

  • cpf_cnpj_validator - Validação CPF/CNPJ
  • email_validator - Validação email
  • extended_masked_text - Máscaras de texto
  • currency_text_input_formatter - Formatação monetária

Autenticação

Fluxo de Login

  1. Usuário submete email/senha
  2. AuthRepository.doLogin() faz POST em API/Login
  3. Servidor retorna objeto User com token
  4. User armazenado via SecureStorageService
  5. Cookies persistidos em $appDocDir/.cookies/

Headers de Requisição

O interceptor adiciona automaticamente:

  • device-model - Modelo do dispositivo
  • version-app - Versão do app
  • userSystemId - ID do usuário
  • deviceId - ID do dispositivo
  • deviceGMT - Timezone

Sistema de Assinaturas

Planos Premium

  • Free - Gratuito
  • Essential - Essencial
  • Intermediate - Intermediário
  • Professional - Profissional
  • Total - Completo

Feature Flags

Features são controladas pelo enum Feature e verificadas via PremiumService.


Segurança

  • 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

Estrutura de Pastas de Assets

assets/
├── images/          # Imagens PNG/JPG
├── icons/           # Ícones SVG
└── fonts/           # Fontes customizadas

Comandos Úteis

# 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_flavorizr

Solicitação de Acessos

Para desenvolver no projeto, solicite acesso a:

  1. GitHub - Repositório dpossas/precifikapp
  2. Firebase Console - Projeto erika-precifica
  3. Figma - Design do aplicativo

Contato

Para dúvidas sobre o projeto, entre em contato com o administrador do repositório.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment