4 formatos de saída
Gera PDF, HTML, CSV e Excel — tudo a partir do mesmo JSON.
Defina relatórios como JSON, alimente com dados, renderize no formato que precisar.
┌──────────┐ ┌──────────┐ ┌──────────────┐ ┌──────────┐
│ JSON do │────▶│ Parser │────▶│ Processador │────▶│ Renderer │──▶ PDF / HTML / CSV / XLSX
│ relatório│ │ │ │ de dados │ │ │
└──────────┘ └──────────┘ └──────────────┘ └──────────┘
▲
│
┌─────┴─────┐
│ Payload │
│ (dados) │
└────────────┘Se você já usou FastReport, JasperReports ou Crystal Reports, sabe o poder de um motor de relatórios de verdade. O Sulfite traz essa mesma ideia para o ecossistema Dart e Flutter — e, no futuro, para servidores backend também.
Você vendeu seu primeiro app de vendas. O cliente pede um relatório de faturamento mensal. Você programa, entrega, funciona. Aí vem o segundo cliente — e quer o mesmo relatório, mas com colunas diferentes, outro logo, outra ordem. O terceiro quer um relatório que nem existia. Sem um motor de relatórios, cada pedido vira demanda de desenvolvimento: mexer no código, compilar, publicar uma nova versão. Com o Sulfite, o layout é um JSON. Você muda o template, alimenta com os dados do cliente e gera o PDF — sem recompilar nada.
| Caso de uso | Como o Sulfite resolve |
|---|---|
| Relatórios sob medida por cliente | Cada cliente tem seu próprio template JSON. Mude o layout sem tocar no código do app. |
| Notas fiscais e recibos | Monte o layout uma vez no Studio, alimente com dados do seu ERP e gere PDFs idênticos para cada venda. |
| Relatórios gerenciais | Vendas por período, estoque, fluxo de caixa — com agrupamento, totais e gráficos. Exporte em PDF ou Excel. |
| Etiquetas e códigos de barras | Imprima etiquetas de produto com código de barras (Code128, EAN13, QR Code) direto do app Flutter. |
| Laudos e fichas técnicas | Relatórios com imagens, tabelas e campos dinâmicos para clínicas, laboratórios e indústria. |
| Catálogos de produtos | Gere catálogos com foto, descrição e preço a partir de um JSON com centenas de itens. |
| Boletos e carnês | Layout fixo com dados variáveis — perfeito para gerar documentos em lote. |
| Dashboards exportáveis | O mesmo relatório que aparece na tela do app pode ser exportado como PDF ou HTML com gráficos. |
| Servidor de relatórios | Use o sulfite_core no backend (Dart Frog, Shelf) para gerar PDFs sob demanda via API REST. |
| Ambiente | Status | Como usar |
|---|---|---|
| App Flutter (mobile/desktop/web) | Pronto | Importe sulfite_core e gere relatórios dentro do app. |
| Editor visual | Pronto | Use o Sulfite Studio para desenhar o layout sem escrever JSON na mão. |
| Linha de comando | Pronto | Compile o CLI como binário nativo e gere PDFs em scripts e pipelines. |
| Servidor backend | Pronto | Use o sulfite_server para gerar relatórios via API REST — armazenamento, autenticação, geração síncrona/assíncrona, conexões criptografadas. |
| Pacote | O que faz |
|---|---|
| sulfite_core | Engine de processamento e renderização. Modelos, parser, processador de dados, renderers (PDF, HTML, CSV, Excel), parâmetros com lookups dinâmicos e validação. |
| sulfite_studio | Editor visual Flutter. Canvas com drag & drop, zoom, undo/redo, filtros dinâmicos, preview em tempo real. |
| sulfite_datasources | Resolvers para fontes externas — REST, PostgreSQL e PostgREST/Supabase. Lookups de banco com paginação e cache. |
| sulfite_report_manager | Widget Flutter completo de gerenciamento de relatórios — CRUD, busca, permissões granulares, visualizador integrado, gerenciador de conexões. |
| sulfite_chat | Integração com IA para geração de relatórios. Agente LLM gera JSON a partir de linguagem natural, com auto-correção. |
| sulfite_cli | Ferramenta de linha de comando. Recebe JSON, gera PDF. Compilável para binário nativo. |
import 'dart:io';
import 'package:sulfite_core/sulfite_core.dart';
void main() async {
final engine = SulfiteEngineImpl();
final report = await engine.parseReport(File('report.json').readAsStringSync());
final data = jsonDecode(File('data.json').readAsStringSync());
final context = await engine.processData(report, data);
final pdfBytes = await engine.renderToPdf(context);
await File('output.pdf').writeAsBytes(pdfBytes);
// Ou HTML, CSV, Excel:
final htmlBytes = await engine.renderToHtml(context);
final csvBytes = await engine.renderToCsv(context);
final xlsxBytes = await engine.renderToExcel(context);
}