TCrudTable<T, K, F extends TFormBase> class

A complete CRUD (Create, Read, Update, Delete) table component.

TCrudTable provides a full-featured data table with:

  • Create, edit, view, archive, restore, and delete operations
  • Form-based create/edit dialogs
  • Active and archive tabs
  • Permission-based action visibility
  • Expandable rows
  • Server-side or client-side data
  • Custom actions

Basic Usage

TCrudTable<Product, int, ProductForm>(
  headers: productHeaders,
  items: products,
  createForm: () => ProductForm(),
  editForm: (product) => ProductForm.fromProduct(product),
  onCreate: (form) async {
    return await api.createProduct(form.toJson());
  },
  onEdit: (product, form) async {
    return await api.updateProduct(product.id, form.toJson());
  },
  onArchive: (product) async {
    await api.archiveProduct(product.id);
    return true;
  },
)

With Archive Support

TCrudTable<User, int, UserForm>(
  headers: userHeaders,
  onLoad: (options) async {
    final response = await api.getUsers(options);
    return TLoadResult(
       response.users,
       response.total,
    );
  },
  onArchiveLoad: (options) async {
    final response = await api.getArchivedUsers(options);
    return TLoadResult(
       response.users,
       response.total,
    );
  },
  onRestore: (user) async {
    await api.restoreUser(user.id);
    return true;
  },
  onDelete: (user) async {
    await api.deleteUser(user.id);
    return true;
  },
)

Type parameters:

  • T: The type of items in the table

  • K: The type of the item key

  • F: The form type (must extend TFormBase)

  • TFormBase for form definitions

Inheritance
Available extensions

Constructors

TCrudTable({Key? key, required List<TTableHeader<T, K>> headers, List<T>? items, TLoadListener<T>? onLoad, ItemKeyAccessor<T, K>? itemKey, List<T>? itemChildren(T item)?, List<T>? archivedItems, TLoadListener<T>? onArchiveLoad, F createForm()?, F editForm(T item)?, Future<T?> onCreate(F form)?, Future<void> onView(T item)?, Future<T?> onEdit(T item, F form)?, Future<bool?> onArchive(T item)?, Future<bool?> onRestore(T item)?, Future<bool?> onDelete(T item)?, TCrudConfig<T, K> config = const TCrudConfig(), TListController<T, K>? controller, TControllerReadyListener<T, K>? onControllerReady, TListController<T, K>? archiveController, void onArchiveControllerReady(TListController<T, K> controller)?, TListExpandedBuilder<T, K>? expandedBuilder, TTableDetails<T, K>? expandedDetails, TTableExpansionMode expansionMode = TTableExpansionMode.dialog, TTableExpansionMode? createMode, double? dialogWidth, double? createDialogWidth, double? sideOverlayWidth, double? createSideOverlayWidth, double? sideOverlayMinWidth, double? sideOverlayMaxWidth, double? sideOverlayWidthRatio, double? createSideOverlayMinWidth, double? createSideOverlayMaxWidth, double? createSideOverlayWidthRatio, required String? itemTitle(T x)?, String? itemSubTitle(T x)?, String? itemDescription(T x)?, String? itemImageUrl(T x)?, List<TKeyValue>? itemInfo(T x)?, bool itemInfoGridInline = true, TTableTheme? theme, Widget rowBuilder(BuildContext ctx, TListItem<T, K> item, int index, Widget row)?, Color? rowColorBuilder(TListItem<T, K> item, int index)?, List<TFilterDef<T>>? filters, Widget? header, Widget headerBuilder(BuildContext ctx)?, EdgeInsets? padding})
Creates a CRUD table.
const

Properties

archiveController → TListController<T, K>?
Controller for managing archived items.
final
archivedItems → List<T>?
The list of archived items (for client-side).
final
config → TCrudConfig<T, K>
Configuration for the CRUD table.
final
controller → TListController<T, K>?
Controller for managing active items.
final
createDialogWidth → double?
Custom width for the dialog when creating or editing items in dialog mode.
final
createForm → F Function()?
Factory function to create a new form.
final
createMode → TTableExpansionMode?
Defines how the expanded content is presented during creation/editing.
final
createSideOverlayMaxWidth → double?
Optional maximum width constraint for the side overlay when creating/editing.
final
createSideOverlayMinWidth → double?
Optional minimum width constraint for the side overlay when creating/editing.
final
createSideOverlayWidth → double?
Custom width for the side overlay when creating or editing items in sideOverlay mode.
final
createSideOverlayWidthRatio → double?
Optional width ratio for the side overlay when creating/editing.
final
dialogWidth → double?
Custom width for the dialog when in dialog mode. Defaults to 800.
final
editForm → F Function(T item)?
Factory function to create an edit form from an item.
final
expandedBuilder → TListExpandedBuilder<T, K>?
Builder for expanded row content.
final
expandedDetails → TTableDetails<T, K>?
Detailed configuration for row expansion. If provided, overrides expansionMode, createMode, expandedBuilder, etc.
final
expansionMode → TTableExpansionMode
Defines how the expanded content is presented.
final
filters → List<TFilterDef<T>>?
Explicit filter field definitions for the table. If omitted for client-side tables, filter fields are automatically inferred from headers. For server-side tables, filters must be explicitly provided.
final
hashCode → int
The hash code for this object.
no setterinherited
Custom header widget rendered at the top of the table (above top bar controls and table content).
final
headerBuilder → Widget Function(BuildContext ctx)?
Custom header builder for building dynamic header content.
final
headers → List<TTableHeader<T, K>>
The column headers for the table.
final
itemChildren → List<T>? Function(T item)?
Function to extract the children list for a hierarchical item.
final
itemDescription → String? Function(T x)?
Function to extract the description from an item.
final
itemImageUrl → String? Function(T x)?
Function to extract the image URL from an item.
final
itemInfo → List<TKeyValue>? Function(T x)?
Function to extract key-value information from an item.
final
itemInfoGridInline → bool
Whether to display key and value inline in grid layout (Key: Value) for itemInfo. Defaults to true.
final
itemKey → ItemKeyAccessor<T, K>?
Function to extract the unique key for an item.
final
items → List<T>?
The list of active items (for client-side).
final
itemSubTitle → String? Function(T x)?
Function to extract the sub-title from an item.
final
itemTitle → String? Function(T x)?
Function to extract the title from an item.
final
key → Key?
Controls how one widget replaces another widget in the tree.
finalinherited
onArchive → Future<bool?> Function(T item)?
Callback for archiving an item.
final
onArchiveControllerReady → void Function(TListController<T, K> controller)?
Callback fired when the archived list controller is initialized and ready.
final
onArchiveLoad → TLoadListener<T>?
Callback for loading archived items (for server-side).
final
onControllerReady → void Function(TListController<T, K> controller)?
Callback fired when the active list controller is initialized and ready.
final
onCreate → Future<T?> Function(F form)?
Callback for creating a new item.
final
onDelete → Future<bool?> Function(T item)?
Callback for permanently deleting an item.
final
onEdit → Future<T?> Function(T item, F form)?
Callback for editing an existing item.
final
onLoad → TLoadListener<T>?
Callback for loading active items (for server-side).
final
onRestore → Future<bool?> Function(T item)?
Callback for restoring an archived item.
final
onView → Future<void> Function(T item)?
Callback for viewing an item.
final
padding → EdgeInsets?
Optional padding for the table content and scrollable area.
final
rowBuilder → Widget Function(BuildContext ctx, TListItem<T, K> item, int index, Widget row)?
Custom builder for the row.
final
rowColorBuilder → Color? Function(TListItem<T, K> item, int index)?
Custom builder for the row background color.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
sideOverlayMaxWidth → double?
Optional maximum width constraint for the side overlay.
final
sideOverlayMinWidth → double?
Optional minimum width constraint for the side overlay. Defaults to 320.
final
sideOverlayWidth → double?
Custom width for the side overlay when in sideOverlay mode. Defaults to 500.
final
sideOverlayWidthRatio → double?
Optional width ratio (fraction of screen width, e.g. 0.5) for responsive side overlay.
final
theme → TTableTheme?
final

Methods

box({double minW = 0.0, double minH = 0.0, double maxW = double.infinity, double maxH = double.infinity}) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in a ConstrainedBox to apply layout constraints.
center({bool when = true}) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in a Center widget.
createElement() → StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() → State<TCrudTable<T, K, F>>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() → List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
expanded({int flex = 1}) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in an Expanded widget.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
padding([double left = 0.0, double top = 0.0, double right = 0.0, double bottom = 0.0]) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in a Padding with flexible edge control.
paddingSymmetric({double h = 0.0, double v = 0.0}) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in a Padding with symmetric horizontal and vertical spacing.
size({double? w, double? h}) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in a SizedBox to apply fixed width and/or height.
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) → String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String
Returns a one-line detailed description of the object.
inherited
toStringShort() → String
A short, textual description of this widget.
inherited
visible(bool visible, {bool maintainState = false}) → Widget

Available on Widget, provided by the WidgetX extension

Wraps this widget in a Visibility widget.
when(bool condition) → Widget

Available on Widget, provided by the WidgetX extension

Returns this widget if condition is true, otherwise returns SizedBox.shrink(). Usage: Text('Hello').when(isVisible)

Operators

operator ==(Object other) → bool
The equality operator.
inherited