ultimate_grid 0.1.1
ultimate_grid: ^0.1.1 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.1 — Docs polish #
- README H1 now reads "Ultimate Grid" (was
ultimate_grid) so the pub.dev page surfaces a product title rather than the snake-case package id. - Restored the "Why this exists" origin section so the GitHub README carries the package's history, lightly reframed to point at the Office Time Log demo instead of the prior timesheet prototype.
No code changes; the API surface is identical to 0.1.0.
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.