ultimate_grid 0.3.1 copy "ultimate_grid: ^0.3.1" to clipboard
ultimate_grid: ^0.3.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.3.1 — Server-side sort delegation fixes #

No breaking changes. Both fixes are corrections to 0.3.0's server-delegated sort behavior; nothing about the public API changed.

Fixed #

  • A layout-only bump (e.g. setColumnWidth, called after rebuilding a controller with a fresh server-sorted page) silently re-ran the local sort/filter/search pipeline too, applying a server-delegated SortKey through the local comparator even though it was only ever meant to be recorded. _rebuildDerived() recomputed column layout and the pipeline unconditionally on every call regardless of which flag (rebuildLayout/ rebuildPipeline) triggered it; each half is now gated independently.
  • Calling a mutator (e.g. setSortKeys from a column menu still open across an async gap) on a GridController that a refetch had already disposed and replaced threw inside notifyListeners(). _bump() now no-ops once disposed instead of crashing — nothing is listening to the stale instance anyway.

0.3.0 — Server-side sort delegation #

No breaking changes. GridController's new constructor params (serverSortableColumns, onServerSortRequested) both default to off (const {} / null), so existing code compiles and behaves identically. Opt in per-controller only where needed.

Added #

  • GridController({serverSortableColumns, onServerSortRequested}) — lets a column's sort be delegated to the caller instead of applied to the local GridDataSource. For grids backed by a server-paginated dataset (the source only ever holds the current page), sorting that page locally would silently reorder just the loaded rows instead of the full result set. Column ids in serverSortableColumns skip the local pipeline sort entirely; onServerSortRequested fires with the requested SortKey (or null on clear) so the caller can refetch sorted data from the server and rebuild the controller. sortKeys still reflects the request either way, so a column menu's active-sort indicator stays correct.

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's hintText now 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 #

  • UltimateSearchField constructed a new FocusNode inside build() on every rebuild — orphaned and never disposed. It is now a State field disposed in dispose().
  • UltimateSearchField.hintText was a documented but unused parameter; the placeholder now renders when the field is empty.

Repository #

  • The GitHub repository was renamed flutter_grid_packageultimate_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, sealed CellValue hierarchy (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. RenderUltimateBody paints visible cells directly via a ParagraphCache LRU — 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+C copies to clipboard as TSV (round-trips with Excel / Sheets).
  • Cell merges. MergeRange on the data source; renderer occludes non-anchor cells via a Uint32List bitset (web-safe).
  • Sort / filter / search. Single-pass ViewPipeline; column-header menu with sort, pin, hide, filter, fit-to-text; UltimateSearchField with 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. AsyncGridDataSource for paged API-backed grids with loading placeholders.
  • Themable. Default GridTheme.mark85; per-column / per-row / per-cell style overrides via InteractionPolicy.
  • Pluggable cell renderers. CellRendererRegistry with per-column override → per-CellKind default → fallback.
  • Widget cells. Pass widgetColumns + cellWidgetBuilder to 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 Uint32List for bitsets (no Uint64List on 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.
6
likes
160
points
197
downloads

Documentation

API reference

Publisher

verified publishercodebigya.com

Weekly Downloads

Scalable, themable 2D data-grid for Flutter — 9-region freeze, canvas-paint body, merges, async data, selection, sort, filter, search.

Repository (GitHub)
View/report issues
Contributing

Topics

#grid #table #datagrid #spreadsheet #timesheet

License

MIT (license)

Dependencies

flutter, meta

More

Packages that depend on ultimate_grid