В повседневной работе мы привыкли к
Column,
Row,
ListView. Они закрывают большинство задач по построению интерфейсов. Но иногда требуется настоящая таблица: строки, столбцы, сортировка, постраничная навигация. И здесь у
Flutter есть несколько специализированных инструментов, о которых многие забывают.
DataTable - для небольших объемов:
Если у вас предсказуемый, небольшой набор данных - идеальный вариант.
DataTable строится на основе
DataRow и
DataCell, все объявляется декларативно. Подходит для экранов настроек, административных панелей, любых мест, где таблица не превышает десятка строк. Сортировка подключается через
onSort, постраничное отображение контента - через
PaginatedDataTable, которая оборачивает обычную
DataTable и добавляет навигацию.
Table - полный контроль:
Если нужно управлять каждой ячейкой, задавать разную ширину колонок, рисовать границы, вставлять сложные виджеты - используйте
Table. Здесь вы сами определяете каждую строку как
TableRow, а внутри - список ячеек с любыми виджетами. Можно задавать ширину колонок: фиксированную (FixedColumnWidth), пропорциональную (FlexColumnWidth) или по содержимому (IntrinsicColumnWidth).
Что важно знать:
- IntrinsicColumnWidth - заставляет Flutter делать два прохода: сначала измерить все, потом отрисовать. На сотнях строк это может начать тормозить.
- Адаптивность - на узких экранах таблица может стать нечитаемой. Лучше либо предусмотреть горизонтальный скролл, либо на мобильных устройствах заменять таблицу на другой тип компоновки.
- Динамическая высота строк - если содержимое ячеек часто меняется, Table может работать неоптимально. Здесь иногда проще собрать свой вариант через ListView + Row.
Когда комбинация Column + Row + ListView лучше:
Простой список, строки сильно различаются по содержимому, нет необходимости выравнивать колонки. Или когда нужен только вертикальный скролл, а табличная структура избыточна. В таких случаях самодельная связка дает больше гибкости и меньше неожиданностей.
Вывод:
DataTable и
Table - не самые популярные виджеты во
Flutter, но в своих нишах они незаменимы.
DataTable удобен для небольших, четко структурированных данных с сортировкой и пагинацией.
Table - для кастомных макетов, где нужно полное управление шириной и содержимым ячеек. Если объемы большие или содержимое часто меняется, стоит присмотреться к другим подходам.