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, 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, TListController<T, K>? archiveController, TListExpandedBuilder<T, K>? expandedBuilder, TTableDetails<T, K>? expandedDetails, TTableExpansionMode expansionMode = TTableExpansionMode.dialog, TTableExpansionMode? createMode, double? createDialogWidth, String? itemTitle(T item)?, String? itemSubTitle(T item)?, String? itemDescription(T item)?, String? itemImageUrl(T item)?, TTableTheme? theme, Widget rowBuilder(BuildContext ctx, TListItem<T, K> item, int index, Widget row)?, Color? rowColorBuilder(TListItem<T, K> item, int index)?})
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
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
hashCode int
The hash code for this object.
no setterinherited
headers List<TTableHeader<T, K>>
The column headers for the table.
final
itemDescription String? Function(T item)?
Function to extract the description from an item.
final
itemImageUrl String? Function(T item)?
Function to extract the image URL from an item.
final
items List<T>?
The list of active items (for client-side).
final
itemSubTitle String? Function(T item)?
Function to extract the sub-title from an item.
final
itemTitle String? Function(T item)?
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
onArchiveLoad TLoadListener<T>?
Callback for loading archived items (for server-side).
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
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
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