Flutter PackagesActive
Flutter Table Plus
동기화 스크롤, 정렬, 선택, 편집, 컬럼 리사이징 등을 지원하는 고성능 Flutter 테이블 위젯
dartflutter
개요
Flutter Table Plus는 Flutter 앱에서 데이터 테이블을 구현할 때 필요한 거의 모든 기능을 하나의 위젯으로 제공하는 오픈소스 패키지입니다. 동기화 스크롤, 정렬, 행 선택, 셀 편집, 컬럼 리오더링, 컬럼 리사이징, 드래그 선택, 병합 행 등 엔터프라이즈급 데이터 그리드에서 요구되는 기능들을 UI-only, data-agnostic 철학 아래 제공합니다. 데이터 관리는 전적으로 사용자에게 맡기고, 위젯은 순수하게 UI 렌더링과 사용자 인터랙션 콜백에만 집중합니다.
주요 기능
- 타입 세이프 제네릭:
FlutterTablePlus<T>로 어떤 데이터 모델이든 타입 안전하게 사용 - 동기화 스크롤: 헤더와 바디가 완벽하게 동기화된 가로/세로 스크롤
- 정렬: 오름차순 ↔ 내림차순 ↔ 없음 3단계 정렬 사이클 (순서 커스터마이징 가능)
- 행 선택: 단일/다중 선택 모드, 체크박스, 드래그 선택 지원
- 셀 편집: 클릭-투-에디트 인라인 편집과 자동 저장
- 컬럼 리오더링: 드래그 앤 드롭으로 컬럼 순서 변경
- 컬럼 리사이징: 헤더 경계선 드래그로 컬럼 너비 조절, min/max 제약 및 너비 영속성 지원
- Auto-Fit 컬럼: 리사이즈 핸들 더블탭으로 자동 맞춤
- 병합 행: 여러 데이터 행을 그룹으로 묶어 시각적으로 표현
- 호버 버튼: 행 호버 시 액션 버튼 표시
- 딥 테마: 8개의 중첩 테마 클래스로 완전한 커스터마이징
스크린샷
지원 플랫폼
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는 몇 가지 점에서 차별화됩니다.
- 데이터 비간섭 원칙: 대부분의 테이블 패키지가 내부적으로 데이터를 관리하려 하지만, 이 패키지는 철저히 UI만 담당합니다. 덕분에 기존 앱 아키텍처에 끼워 넣기가 쉽고, 복잡한 비즈니스 로직과 충돌하지 않습니다.
- 풍부한 기능과 낮은 의존성의 균형: 컬럼 리사이징, 드래그 선택, 병합 행, 호버 버튼 등 엔터프라이즈급 기능을 갖추면서도 외부 의존성은 단 하나입니다.
- 8계층 테마 시스템:
TablePlusTheme아래 Header, Body, Scrollbar, Checkbox, Editable, Tooltip, HoverButton, ResizeHandle 등 세분화된 테마 클래스로 픽셀 단위의 디자인 커스터마이징이 가능합니다. - 활발한 개발: v1.0부터 v2.8까지 꾸준한 기능 추가와 리팩토링이 이어지고 있으며, BREAKING 변경에 대한 마이그레이션 가이드도 제공됩니다.