Back to Projects
Flutter PackagesActive

Flutter Table Plus

A highly customizable Flutter table widget with synchronized scrolling, sorting, selection, editing, and column resizing

dartflutter

Pub Version License

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.

Flutter Table Plus Demo

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

Flutter Table Plus Demo

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> to FlutterTablePlus<T> generics for compile-time type safety. The valueAccessor: (T) => dynamic pattern provides direct model field access.
  • Builder Pattern: TableColumnsBuilder prevents 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 itemExtentBuilder for 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:

  1. 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.
  2. Rich Features, Minimal Dependencies: It delivers enterprise-grade features — column resizing, drag selection, merged rows, hover buttons — with just a single external dependency.
  3. 8-Layer Theme System: Under TablePlusTheme, specialized theme classes for Header, Body, Scrollbar, Checkbox, Editable, Tooltip, HoverButton, and ResizeHandle enable pixel-level design customization.
  4. 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.

Comments