ultimate_grid 0.1.0
ultimate_grid: ^0.1.0 copied to clipboard
Scalable, themable 2D data-grid for Flutter — 9-region freeze, canvas-paint body, merges, async data, selection, sort, filter, search.
Changelog #
0.1.0 — Initial release #
First public release of ultimate_grid — a scalable, themable 2D
data-grid for Flutter.
Highlights #
- Headless model.
GridSchema+GridDataSource+GridController. Sparse cell storage, sealedCellValuehierarchy (Empty / Number / Text / Bool / Date / Formula / Custom), lazy metadata side-channel. - 9-region freeze layout. Left- / right-frozen columns × top- / bottom-frozen rows, with non-contiguous freeze support ordered by pin priority.
- Custom RenderObject body.
RenderUltimateBodypaints visible cells directly via aParagraphCacheLRU — no widget tree per cell. Scales to 5 M rows with only the visible window painted each frame. - Selection. Drag-to-select rectangles inside the body; Shift-click
extends; Cmd/Ctrl-click adds non-contiguous ranges;
Cmd/Ctrl+Ccopies to clipboard as TSV (round-trips with Excel / Sheets). - Cell merges.
MergeRangeon the data source; renderer occludes non-anchor cells via aUint32Listbitset (web-safe). - Sort / filter / search. Single-pass
ViewPipeline; column-header menu with sort, pin, hide, filter, fit-to-text;UltimateSearchFieldwith Highlight / Filter modes. - Drag-resize + drag-reorder columns. 8-px right-edge handle on every column header; long-press drag to reorder middle columns (frozen columns are pinned in place).
- Async data source.
AsyncGridDataSourcefor paged API-backed grids with loading placeholders. - Themable. Default
GridTheme.mark85; per-column / per-row / per-cell style overrides viaInteractionPolicy. - Pluggable cell renderers.
CellRendererRegistrywith per-column override → per-CellKinddefault → fallback. - Widget cells. Pass
widgetColumns+cellWidgetBuilderto render specific columns as widgets while other columns keep the fast paint path. - Embedded header + scrollbars. Three-region horizontal header syncs with body; dedicated scrollbar gutters that sit outside the table edge, past frozen columns / rows.
- In-cell editor. Double-tap to edit; Enter commits, Esc cancels, click-outside commits the live text. Select-all on open. Cell borders preserved during edit.
Constraints #
- Flutter web uses
Uint32Listfor bitsets (noUint64Liston web). - Body cells render via direct paint, not widgets — drag-to-highlight substring inside a single cell is intentionally not supported. The in-cell editor (double-tap) gives full text-selection / native context menu.