Flutter Table Plus
A highly customizable Flutter table widget with synchronized scrolling, sorting, selection, editing, and column resizing
Overview
Flutter Table Plus is an open-source Flutter package that delivers nearly every feature you need for data tables in a single widget. It provides synchronized scrolling, sorting, row selection, cell editing, column reordering, column resizing, drag selection, merged rows, and more — all under a UI-only, data-agnostic philosophy. The package never touches your data; it focuses purely on UI rendering and user interaction callbacks, leaving data management entirely in your hands.
Key Features
- Type-Safe Generics:
FlutterTablePlus<T>works with any data model with compile-time safety - Synchronized Scrolling: Header and body scroll together seamlessly in both directions
- Sorting: Three-state sort cycle (ascending ↔ descending ↔ none) with configurable order
- Row Selection: Single/multiple selection modes with checkboxes and drag-to-select
- Inline Editing: Click-to-edit cells with auto-save on focus loss
- Column Reordering: Drag-and-drop column repositioning, including drop-to-last
- Column Resizing: Drag header edges to resize with min/max constraints and width persistence
- Auto-Fit Columns: Double-tap resize handle to auto-fit content width
- Merged Rows: Group multiple data rows with custom merged content
- Hover Buttons: Action buttons that appear on row hover
- Deep Theming: 8 nested theme classes for pixel-level customization
Screenshots
Supported Platforms
Android, iOS, Web, macOS, Windows, Linux — works on all Flutter-supported platforms.
Technical Highlights
- UI-only Architecture: The package never stores or mutates your data. All state changes are communicated through callbacks, making it compatible with any state management solution — setState, Provider, Riverpod, Bloc, or anything else.
- Generic Migration (v2.0): Migrated from
Map<String, dynamic>toFlutterTablePlus<T>generics for compile-time type safety. ThevalueAccessor: (T) => dynamicpattern provides direct model field access. - Builder Pattern:
TableColumnsBuilderprevents column order conflicts and ensures safe column definitions. - Minimal Dependencies: The only external dependency is
just_tooltip. Everything else is pure Flutter/Dart, keeping the package lightweight and maximally compatible. - Performance Optimizations: Eliminates full-table rebuilds on mouse hover, caches height and overflow detection, and supports
itemExtentBuilderfor smooth scrolling with 10,000+ rows.
Why It Stands Out
The Flutter ecosystem offers several table widgets — DataTable, PlutoGrid, SfDataGrid — but Flutter Table Plus differentiates itself in key ways:
- Data Non-Interference Principle: While most table packages try to manage data internally, this package is strictly UI-only. This makes it easy to integrate into existing app architectures without conflicting with complex business logic.
- Rich Features, Minimal Dependencies: It delivers enterprise-grade features — column resizing, drag selection, merged rows, hover buttons — with just a single external dependency.
- 8-Layer Theme System: Under
TablePlusTheme, specialized theme classes for Header, Body, Scrollbar, Checkbox, Editable, Tooltip, HoverButton, and ResizeHandle enable pixel-level design customization. - Active Development: From v1.0 to v2.8, the package has seen continuous feature additions and refactoring, with migration guides provided for every breaking change.