프로젝트로 돌아가기
Flutter PackagesActive

Flutter Table Plus

동기화 스크롤, 정렬, 선택, 편집, 컬럼 리사이징 등을 지원하는 고성능 Flutter 테이블 위젯

dartflutter

Pub Version License

개요

Flutter Table Plus는 Flutter 앱에서 데이터 테이블을 구현할 때 필요한 거의 모든 기능을 하나의 위젯으로 제공하는 오픈소스 패키지입니다. 동기화 스크롤, 정렬, 행 선택, 셀 편집, 컬럼 리오더링, 컬럼 리사이징, 드래그 선택, 병합 행 등 엔터프라이즈급 데이터 그리드에서 요구되는 기능들을 UI-only, data-agnostic 철학 아래 제공합니다. 데이터 관리는 전적으로 사용자에게 맡기고, 위젯은 순수하게 UI 렌더링과 사용자 인터랙션 콜백에만 집중합니다.

Flutter Table Plus Demo

주요 기능

  • 타입 세이프 제네릭: FlutterTablePlus<T>로 어떤 데이터 모델이든 타입 안전하게 사용
  • 동기화 스크롤: 헤더와 바디가 완벽하게 동기화된 가로/세로 스크롤
  • 정렬: 오름차순 ↔ 내림차순 ↔ 없음 3단계 정렬 사이클 (순서 커스터마이징 가능)
  • 행 선택: 단일/다중 선택 모드, 체크박스, 드래그 선택 지원
  • 셀 편집: 클릭-투-에디트 인라인 편집과 자동 저장
  • 컬럼 리오더링: 드래그 앤 드롭으로 컬럼 순서 변경
  • 컬럼 리사이징: 헤더 경계선 드래그로 컬럼 너비 조절, min/max 제약 및 너비 영속성 지원
  • Auto-Fit 컬럼: 리사이즈 핸들 더블탭으로 자동 맞춤
  • 병합 행: 여러 데이터 행을 그룹으로 묶어 시각적으로 표현
  • 호버 버튼: 행 호버 시 액션 버튼 표시
  • 딥 테마: 8개의 중첩 테마 클래스로 완전한 커스터마이징

스크린샷

Flutter Table Plus Demo

지원 플랫폼

Android, iOS, Web, macOS, Windows, Linux — 모든 Flutter 지원 플랫폼에서 동작합니다.

기술적 특징

  • UI-only 아키텍처: 패키지가 데이터를 저장하거나 변경하지 않습니다. 모든 상태 변경은 콜백을 통해 외부로 전달되어, setState, Provider, Riverpod, Bloc 등 어떤 상태 관리 솔루션과도 자연스럽게 결합됩니다.
  • 제네릭 마이그레이션 (v2.0): Map<String, dynamic> 기반에서 FlutterTablePlus<T> 제네릭 타입으로 전환하여 컴파일 타임 타입 안전성을 확보했습니다. valueAccessor: (T) => dynamic 패턴으로 모델 필드에 직접 접근합니다.
  • Builder 패턴: TableColumnsBuilder로 컬럼 순서 충돌을 방지하며 안전하게 컬럼을 정의합니다.
  • 최소 의존성: 외부 의존성은 just_tooltip 하나뿐입니다. 나머지는 모두 순수 Flutter/Dart로 구현되어 있어 패키지 크기와 호환성 부담이 극히 적습니다.
  • 성능 최적화: 마우스 호버 시 전체 테이블 리빌드 제거, 높이/오버플로 감지 캐싱, itemExtentBuilder를 통한 10,000+ 행 스크롤 성능 개선 등이 적용되어 있습니다.

왜 주목할까?

Flutter 생태계에는 DataTable, PlutoGrid, SfDataGrid 등 다양한 테이블 위젯이 있지만, Flutter Table Plus는 몇 가지 점에서 차별화됩니다.

  1. 데이터 비간섭 원칙: 대부분의 테이블 패키지가 내부적으로 데이터를 관리하려 하지만, 이 패키지는 철저히 UI만 담당합니다. 덕분에 기존 앱 아키텍처에 끼워 넣기가 쉽고, 복잡한 비즈니스 로직과 충돌하지 않습니다.
  2. 풍부한 기능과 낮은 의존성의 균형: 컬럼 리사이징, 드래그 선택, 병합 행, 호버 버튼 등 엔터프라이즈급 기능을 갖추면서도 외부 의존성은 단 하나입니다.
  3. 8계층 테마 시스템: TablePlusTheme 아래 Header, Body, Scrollbar, Checkbox, Editable, Tooltip, HoverButton, ResizeHandle 등 세분화된 테마 클래스로 픽셀 단위의 디자인 커스터마이징이 가능합니다.
  4. 활발한 개발: v1.0부터 v2.8까지 꾸준한 기능 추가와 리팩토링이 이어지고 있으며, BREAKING 변경에 대한 마이그레이션 가이드도 제공됩니다.

댓글