ultimate_grid 0.2.0
ultimate_grid: ^0.2.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.2.0 — Documentation, live showcase & search-field fixes #
No breaking changes. The public API is identical to 0.1.x — existing code compiles and behaves the same. The only behavior change is that
UltimateSearchField'shintTextnow actually renders (it was previously a no-op). No types, parameters, or exports were removed or renamed.
Added #
- Full documentation set under
docs/— the single source of truth: getting started, concepts, columns, cells & rendering, data sources, interaction, sort/filter/search, theming, performance, recipes, plus a status/roadmap. Linked from the README and rendered in the live demo. - Live showcase site (the
example/app), modelled on bootstrap-table: deep-linkable routes, a hero/home, categorized live examples — each with copy-pasteable source loaded from the actual running demo files — in-app docs, and a roadmap page. Deployed to GitHub Pages. - README badges (pub version / points / likes / publisher, CI, stars, license), a links bar, and a shipped/planned feature matrix.
Fixed #
UltimateSearchFieldconstructed a newFocusNodeinsidebuild()on every rebuild — orphaned and never disposed. It is now aStatefield disposed indispose().UltimateSearchField.hintTextwas a documented but unused parameter; the placeholder now renders when the field is empty.
Repository #
- The GitHub repository was renamed
flutter_grid_package→ultimate_grid(old URLs redirect automatically). The pub package name is unchanged. - Added GitHub Actions: CI (analyze / test / format / publish dry-run / web build) and a Pages deploy for the showcase.
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.