π nrb (Nexora Report Builder)
A customizable and highly responsive Flutter data grid and report builder designed for complex nested headers, dynamic data visualization, and professional exports.
Ideal for enterprise dashboards, inventory tracking, financial reports, or structured data-entry UIs.
π Try it live in your browser: Interactive Web Demo
πΈ Capabilities at a Glance
Editable Data Grids
|
Premium Exporting
|
β¨ Core Features
- π± Fully Responsive: Columns auto-scale and expand to fill screen space based on content.
- π Freeze Panes: Sticky left-side columns and complex multi-row nested headers.
- βοΈ Editable Grids: Mix
TextCellwith interactiveTextFieldCellfor data-entry forms. - π° Smart Formatting: Advanced
NRBNumberFormatterfor International and Indian currencies. - π Dynamic Resizing: Drag column edges to resize or double-click to auto-fit.
- π₯ Native PDF Export (FREE): Generate professional multi-page PDF reports locallyβno server, no cost.
- π₯ Premium Export (PRO): Instant high-performance backend exports to Excel (.xlsx), Word (.docx), and PDF.
π Getting Started
Add the dependency to your pubspec.yaml:
dependencies:
nrb: ^4.0.7
π‘ Use Case 1: Free Local PDF Export
Perfect for offline apps or users who want free, professional PDF reports. Simply leave the apiKey blank.
Show Code Snippet (Free Native PDF)
NrbTableEngine(
reportName: "Local_Monthly_Report",
enableDownload: true,
apiKey: "", // Triggers Free Local Engine
companyName: "Your Business Ltd", // Optional Branding
companyAddress: "City, Country",
headers: [ /* Your Headers */ ],
tableData: [ /* Your Data */ ],
)
π‘ Use Case 2: Premium Multi-Format Export
Unlock the power of Excel and Word exports via our high-speed cloud engine.
Show Code Snippet (Premium Export)
NrbTableEngine(
packageName: "com.your.app", // Registered Package Name
apiKey: "YOUR_PREMIUM_API_KEY", // Get from Nexora Dashboard
enableDownload: true,
headers: [ /* Your Headers */ ],
tableData: [ /* Your Data */ ],
)
π Beautiful Native Charts
nrb includes a suite of physics-based, animated charts optimized for report dashboards.
View Supported Chart Types

- Multi-Line Chart: Interactive trends with tooltips.
- Segmented Gauge: KPI achievement visualization.
- Scatter Plot: Data correlation tracking.
- Histogram & Pie Charts: Distribution analysis.
- Donut Cards & Metric Cards: Compact summary widgets.
πΎ Standalone JSON β Excel
You can now export ordinary API JSON to Excel without creating an NrbTableEngine report first. The package reuses the same registered package name, API key, feature lookup, and InnovateNestLabs report-processing server used by the existing premium export flow.
Return the Excel binary
import 'dart:typed_data';
import 'package:nrb/nrb.dart';
final Uint8List bytes = await NRBJsonToExcel(
apiResponseJson,
packageName: 'com.your.app',
apiKey: 'YOUR_PREMIUM_API_KEY',
fileName: 'customer_report',
);
NRBJsonToExcel(...) returns the generated .xlsx bytes, so the caller can save, upload, share, or process the file independently.
Use Flutter 3.32 / Dart 3.8 or newer. Excel generation requires a registered
packageName, an API key, and an enabled Excel/XLSX subscription feature.
The existing NrbJsonToExcel.convert(...) method remains available and delegates
to the same implementation; NRBJsonToExcel(...) is the convenience entry point.
Existing NrbTableEngine table/report exports remain available.
Common Download floating action button
Scaffold(
body: YourExistingScreen(),
floatingActionButton: NRBJsonToExcelButton(
json: apiResponseJson,
packageName: 'com.your.app',
apiKey: 'YOUR_PREMIUM_API_KEY',
fileName: 'customer_report',
),
);
If your API response keeps the row list under a non-standard key, specify it explicitly:
NRBJsonToExcelButton(
json: response,
dataKey: 'customerList',
packageName: 'com.your.app',
apiKey: 'YOUR_PREMIUM_API_KEY',
)
The binary API accepts the same dataKey: 'customerList' argument. Without it,
the converter checks data, items, results, records, and rows, then the
first list of objects under another key. Otherwise, the input map becomes one row.
An explicit dataKey must exist and contain a list.
Nested JSON objects become dot-notation columns (for example, customer.name).
Headers include keys from every row in first-seen order. Missing/null fields become
empty cells; arrays and empty nested objects become JSON text. Primitive or mixed
row lists use one value column. An empty object or collection exports a No Data
header and No data available row. Strings, booleans, finite numbers, Unicode,
and Bangla text are supported.
The API propagates network/server errors. Invalid JSON values, cycles, nesting
deeper than 100 levels, and colliding dot-notation fields throw FormatException.
Blank credentials or an invalid dataKey throw ArgumentError. Empty/non-ZIP
server responses are rejected. Callers of the binary API should handle errors
with try/catch.
The button prevents repeated taps while preparing the file and supports
onCompleted / onError callbacks. Completion means the native file was saved or
the browser download was started; browsers cannot confirm that a user kept the
file. Callbacks are suppressed after the widget is disposed. Filenames are
sanitized and receive exactly one .xlsx extension.
Native downloads use the desktop Downloads folder or app documents. Android first attempts public Downloads and falls back to app storage if scoped storage denies the write. Web downloads use the browser's download flow. Applications should present the returned save location or the button's success message to users.
π Advanced Customization
Number Formatting
TextCell(
itemContent: "1099493.5",
isAmount: true,
numberFormatType: CellNumberFormat.indian, // 10,99,493.50
roundTo: 2,
)
Complex Headers (ColSpan/RowSpan)
headers: [
[
NrbHeaderCell(text: "Group A", colSpan: 2, backgroundColor: Colors.blue),
NrbHeaderCell(text: "Group B", colSpan: 3, backgroundColor: Colors.green),
],
[
NrbHeaderCell(text: "Sub 1"), NrbHeaderCell(text: "Sub 2"),
NrbHeaderCell(text: "Sub 3"), NrbHeaderCell(text: "Sub 4"), NrbHeaderCell(text: "Sub 5"),
]
]
π Example Output

π License
Β© 2025-2026 Innovate Nest Labs. Released under the Innovate Nest Labs Custom License. Commercial integration is permitted subject to the terms in the LICENSE file.
π¬ Support
Found a bug or need a feature? Open a GitHub Issue.
Libraries
- nrb
- nrb/enum/cell_number_format
- nrb/enum/number_style
- nrb/enum/round_mode
- nrb/graphs/nrb_bar_chart
- nrb/graphs/nrb_combo_chart
- nrb/graphs/nrb_donut_chart
- nrb/graphs/nrb_gauge_chart
- nrb/graphs/nrb_histogram
- nrb/graphs/nrb_line_chart
- nrb/graphs/nrb_metric_card
- nrb/graphs/nrb_multi_bar_chart
- nrb/graphs/nrb_multi_donut_chart
- nrb/graphs/nrb_multi_line_chart
- nrb/graphs/nrb_pie_chart
- nrb/graphs/nrb_scatter_plot
- nrb/graphs/nrb_stacked_bar_chart
- nrb/graphs/nrb_trend_card
- nrb/header_cell
- nrb/json_to_excel/nrb_excel_file_name
- nrb/json_to_excel/nrb_json_excel_file_downloader
- nrb/json_to_excel/nrb_json_excel_file_downloader_io
- nrb/json_to_excel/nrb_json_excel_file_downloader_stub
- nrb/json_to_excel/nrb_json_excel_file_downloader_web
- nrb/json_to_excel/nrb_json_to_excel
- nrb/nrb_custom_widget_cell
- nrb/nrb_header_cell
- nrb/nrb_table_engine_builder
- nrb/report_cell
- nrb/report_controller
- nrb/report_design_builder
- nrb/sub_header_cell
- nrb/text_cell
- nrb/text_field_cell
- nrb/utils/native_file_saver
- nrb/utils/network/nrb_endpoints
- nrb/utils/network/nrb_http_exception
- nrb/utils/network/nrb_network_client
- nrb/utils/network/nrb_network_client_io
- nrb/utils/network/nrb_network_client_stub
- nrb/utils/network/nrb_network_client_web
- nrb/utils/nrb_exporter
- nrb/utils/nrb_native_pdf_generator
- nrb/utils/nrb_number_formatter
- nrb/utils/nrb_table_downloader
- nrb/utils/nrb_table_downloader_io
- nrb/utils/nrb_table_downloader_stub
- nrb/utils/nrb_table_downloader_web
- nrb/utils/nrb_table_exporter
- nrb/utils/nrb_toast
- nrb/utils/report_downloader
- nrb/utils/report_downloader_io
- nrb/utils/report_downloader_stub
- nrb/utils/report_downloader_web
- nrb_table_engine
- report_maker