Documentação API

Integração Meira ISP App ↔ Backend · documentação viva versionada

Doc v2026.05.20App v1.0.0Admin v1.0.0

Estado atual da integração

Status de cada categoria de dados

Backend pendente

Auth Supabase

Mock atual — qualquer credencial entra

planejado

Tickets / Chamados

Lista hardcoded · 6 tickets seed

planejado

Comunicados

Lista hardcoded · 5 comunicados seed

planejado

Agenda

Persistido em SharedPreferences (local)

planejado

Regulatório

Outorgas/CREA/PADOs hardcoded

planejado

Financeiro

Faturas hardcoded

planejado

Documentos

Lista hardcoded · sem download real

planejado

Perfil do provedor

Dados hardcoded · NetSul demo

planejado

Push (FCM/APNs)

Initialization pronta · sem token registration

planejado

Storage de arquivos

Anexos no chamado salvos só em memória

planejado

Stack do app (já implementado)

UIFlutter Material 3 + JetBrains Mono
Statepackage:provider (ChangeNotifier)
Routinggo_router
HTTPpackage:http (pronto, ainda não usado)
Auth localflutter_secure_storage (JWT)
Cache localshared_preferences
Pushfirebase_core + firebase_messaging
Biometrialocal_auth (FaceID/TouchID)
JS Interopdart:js_interop (web)

Stack do backend esperado

AuthSupabase Auth (JWT + PKCE)
APIPostgREST · https://{ref}.supabase.co/rest/v1/*
RealtimeSupabase Realtime (WebSocket)
StorageSupabase Storage (S3)
Edge functionsSupabase Edge (Deno) — opcional

Setup inicial

1. Adicionar credenciais Supabase via .env (ou --dart-define)

# .env (NÃO commitar)
SUPABASE_URL=https://abc123.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiI...
ENV=production

2. Adicionar dependências no pubspec.yaml:

dependencies:
  supabase_flutter: ^2.5.0
  freezed_annotation: ^2.4.1
  json_annotation: ^4.9.0

dev_dependencies:
  freezed: ^2.5.2
  json_serializable: ^6.7.1
  build_runner: ^2.4.9

3. Inicializar no main.dart:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Supabase.initialize(
    url: const String.fromEnvironment('SUPABASE_URL'),
    anonKey: const String.fromEnvironment('SUPABASE_ANON_KEY'),
    authOptions: const FlutterAuthClientOptions(
      authFlowType: AuthFlowType.pkce,
      autoRefreshToken: true,
    ),
  );
  runApp(const MeiraApp());
}

final supabase = Supabase.instance.client;