DynamicTable constructor
- Key? key,
- bool showActions = false,
- Widget? header,
- List<
Widget> ? actions, - required List<
DynamicTableDataColumn> columns, - int? sortColumnIndex,
- bool sortAscending = true,
- ValueSetter<
bool?> ? onSelectAll, - double dataRowMinHeight = kMinInteractiveDimension,
- double dataRowMaxHeight = kMinInteractiveDimension,
- double headingRowHeight = 56.0,
- double horizontalMargin = 24.0,
- double columnSpacing = 56.0,
- bool showCheckboxColumn = true,
- bool showFirstLastButtons = false,
- int? initialFirstRowIndex = 0,
- ValueChanged<
int> ? onPageChanged, - int rowsPerPage = defaultRowsPerPage,
- List<
int> availableRowsPerPage = const <int>[defaultRowsPerPage, defaultRowsPerPage * 2, defaultRowsPerPage * 5, defaultRowsPerPage * 10], - ValueChanged<
int?> ? onRowsPerPageChanged, - DragStartBehavior dragStartBehavior = DragStartBehavior.start,
- Color? arrowHeadColor,
- double? checkboxHorizontalMargin,
- ScrollController? controller,
- bool? primary,
- bool onRowEdit()?,
- required List<
DynamicTableDataRow> rows, - String actionColumnTitle = "Actions",
- bool onRowDelete()?,
- List? onRowSave()?,
- bool showDeleteAction = false,
- bool showAddRowButton = false,
Creates a widget describing a paginated DataTable on a Card.
The header
should give the card's header, typically a Text widget.
The columns
argument must be a list of as many DataColumn objects as
the table is to have columns, ignoring the leading checkbox column if any.
The columns
argument must have a length greater than zero and cannot be
null.
If the table is sorted, the column that provides the current primary key
should be specified by index in sortColumnIndex
, 0 meaning the first
column in columns
, 1 being the next one, and so forth.
The actual sort order can be specified using sortAscending
; if the sort
order is ascending, this should be true (the default), otherwise it should
be false.
The source
must not be null. The source
should be a long-lived
DataTableSource. The same source should be provided each time a
particular PaginatedDataTable widget is created; avoid creating a new
DataTableSource with each new instance of the PaginatedDataTable
widget unless the data table really is to now show entirely different
data from a new source.
The rowsPerPage
and availableRowsPerPage
must not be null (they
both have defaults, though, so don't have to be specified).
Themed by DataTableTheme. DataTableThemeData.decoration is ignored. To modify the border or background color of the PaginatedDataTable, use CardTheme, since a Card wraps the inner DataTable.
Implementation
DynamicTable({
super.key,
this.showActions = false,
this.header,
this.actions,
required this.columns,
this.sortColumnIndex,
this.sortAscending = true,
this.onSelectAll,
this.dataRowMinHeight = kMinInteractiveDimension,
this.dataRowMaxHeight = kMinInteractiveDimension,
this.headingRowHeight = 56.0,
this.horizontalMargin = 24.0,
this.columnSpacing = 56.0,
this.showCheckboxColumn = true,
this.showFirstLastButtons = false,
this.initialFirstRowIndex = 0,
this.onPageChanged,
this.rowsPerPage = defaultRowsPerPage,
this.availableRowsPerPage = const <int>[
defaultRowsPerPage,
defaultRowsPerPage * 2,
defaultRowsPerPage * 5,
defaultRowsPerPage * 10
],
this.onRowsPerPageChanged,
this.dragStartBehavior = DragStartBehavior.start,
this.arrowHeadColor,
this.checkboxHorizontalMargin,
this.controller,
this.primary,
this.onRowEdit,
required this.rows,
this.actionColumnTitle = "Actions",
this.onRowDelete,
this.onRowSave,
this.showDeleteAction = false,
this.showAddRowButton = false,
}) : assert(() {
if ((onRowEdit == null && onRowSave != null) ||
(onRowEdit != null && onRowSave == null)) {
return false;
} else {
return true;
}
}(), "onRowEdit and onRowSave must be both null or both non-null"),
assert(() {
if (showAddRowButton == true && showActions == false) {
return false;
} else {
return true;
}
}(),
"showActions cannot be false if showAddRowButton is true, because the actions column is required to save the new row");