Table

fun <T : Any, C> Table(itemsCount: Int, itemAt: (Int) -> T?, state: TableState<C>, columns: ImmutableList<ColumnSpec<T, C, Unit>>, modifier: Modifier = Modifier, placeholderRow: @Composable () -> Unit? = null, rowKey: (item: T?, index: Int) -> Any = { _, i -> i }, onRowClick: (T) -> Unit? = null, onRowLongClick: (T) -> Unit? = null, onRowMove: (fromIndex: Int, toIndex: Int) -> Unit? = null, contextMenu: @Composable (item: T, pos: Offset, dismiss: () -> Unit) -> Unit? = null, customization: TableCustomization<T, C> = DefaultTableCustomization(), colors: TableColors = TableDefaults.colors(), strings: StringProvider = DefaultStrings, verticalState: LazyListState = rememberLazyListState(), horizontalState: ScrollState = rememberScrollState(), icons: TableHeaderIcons = TableHeaderDefaults.icons(), shape: Shape = RoundedCornerShape(4.dp), border: BorderStroke? = null, rowEmbedded: @Composable (rowIndex: Int, item: T) -> Unit? = null, embedded: Boolean = false)

Composable read-only data table that renders a header and a virtualized list of rows.

This is a convenience wrapper around EditableTable for tables without editing support.

  • Columns are described by columns (ColumnSpec).

  • Data is provided via itemsCount and itemAt loader.

  • Sorting, filters, ordering and selection are controlled by state.

Generic parameters:

  • T actual row item type.

  • C column key type.

Parameters

itemsCount

total number of rows to display

itemAt

loader that returns an item for the given index; may return null while loading

state

mutable table state (sorting, filters, order, selection)

columns

list of visible/available column specifications

modifier

layout modifier for the whole table

placeholderRow

optional row content shown when an item is null

rowKey

stable key for rows; defaults to index

onRowClick

row primary action handler

onRowLongClick

optional long-press handler

contextMenu

optional context menu host, invoked with item and absolute position

customization

styling hooks for rows and cells

colors

container/content colors

strings

string provider for UI text

verticalState

list scroll state

horizontalState

horizontal scroll state of the whole table

icons

header icons used for sort and filter affordances

shape

surface shape of the table

border

outer border stroke; null uses theme default, TableDefaults.NoBorder disables border

embedded

When true, the table renders at its full intrinsic height with no internal vertical scrolling — every row is laid out at once. Use this when embedding the table inside an already-scrollable container (e.g. a row of another table). When false (default), the table occupies a bounded area and scrolls its rows internally.


fun <T : Any, C, E> Table(itemsCount: Int, itemAt: (Int) -> T?, state: TableState<C>, columns: ImmutableList<ColumnSpec<T, C, E>>, tableData: E, modifier: Modifier = Modifier, placeholderRow: @Composable () -> Unit? = null, rowKey: (item: T?, index: Int) -> Any = { _, i -> i }, onRowClick: (T) -> Unit? = null, onRowLongClick: (T) -> Unit? = null, onRowMove: (fromIndex: Int, toIndex: Int) -> Unit? = null, contextMenu: @Composable (item: T, pos: Offset, dismiss: () -> Unit) -> Unit? = null, customization: TableCustomization<T, C> = DefaultTableCustomization(), colors: TableColors = TableDefaults.colors(), strings: StringProvider = DefaultStrings, verticalState: LazyListState = rememberLazyListState(), horizontalState: ScrollState = rememberScrollState(), icons: TableHeaderIcons = TableHeaderDefaults.icons(), shape: Shape = RoundedCornerShape(4.dp), border: BorderStroke? = null, rowEmbedded: @Composable (rowIndex: Int, item: T) -> Unit? = null, embedded: Boolean = false)

Composable data table with custom table data state.

This overload allows passing custom table data that will be accessible in headers, footers, and edit cells.

  • Columns are described by columns (ColumnSpec).

  • Data is provided via itemsCount and itemAt loader.

  • Sorting, filters, ordering and selection are controlled by state.

Generic parameters:

  • T actual row item type.

  • C column key type.

  • E table data type - shared state accessible in headers, footers, and edit cells.

Parameters

itemsCount

total number of rows to display

itemAt

loader that returns an item for the given index; may return null while loading

state

mutable table state (sorting, filters, order, selection)

columns

list of visible/available column specifications

tableData

current table data instance - accessible in headers, footers, and edit cells

modifier

layout modifier for the whole table

placeholderRow

optional row content shown when an item is null

rowKey

stable key for rows; defaults to index

onRowClick

row primary action handler

onRowLongClick

optional long-press handler

contextMenu

optional context menu host, invoked with item and absolute position

customization

styling hooks for rows and cells

colors

container/content colors

strings

string provider for UI text

verticalState

list scroll state

horizontalState

horizontal scroll state of the whole table

icons

header icons used for sort and filter affordances

shape

surface shape of the table

border

outer border stroke; null uses theme default, TableDefaults.NoBorder disables border

embedded

When true, the table renders at its full intrinsic height with no internal vertical scrolling — every row is laid out at once. Use this when embedding the table inside an already-scrollable container (e.g. a row of another table). When false (default), the table occupies a bounded area and scrolls its rows internally.