TTableHeader<T, K>.actions constructor
TTableHeader<T, K>.actions (
- List<
TButtonGroupItem> builder(- TListItem<
T, K>
- TListItem<
- String text = "Actions",
- Alignment? alignment = Alignment.center,
- int? flex,
- double? minWidth,
- double? maxWidth,
- int? count,
- double widthEstimator(
- T data
- bool flattenOnMobile = false,
- String mobileKeyPrefixBuilder()?,
- List<
TKeyValue> keyValuesBuilder(- T data
Creates a header for row actions.
Automatically separates items into flat inline buttons (when TButtonGroupItem.showFlat is true) and an overflow dropdown menu (triple-dots icon) for remaining actions.
Implementation
TTableHeader.actions(
List<TButtonGroupItem> Function(TListItem<T, K>) builder, {
this.text = "Actions",
this.alignment = Alignment.center,
this.flex,
this.minWidth,
double? maxWidth,
int? count,
double Function(T data)? widthEstimator,
this.flattenOnMobile = false,
this.mobileKeyPrefixBuilder,
this.keyValuesBuilder,
}) : map = null,
key = null,
filterType = null,
filterable = false,
filterOperators = null,
filterItems = null,
filterDef = null,
widthEstimator = widthEstimator ?? ((_) => (count != null ? (40.0 * count + 16.0) : 75.0)),
maxWidth = maxWidth != null
? maxWidth.clamp(75.0, 300.0)
: count != null
? (40.0 * count + 36.0).clamp(75.0, 300.0)
: null,
builder = ((ctx, item, __) {
final isDense = TTableScope.maybeOf(ctx)?.dense ?? false;
final allItems = builder(item);
if (allItems.isEmpty) return const SizedBox.shrink();
final hasExplicitFlat = allItems.any((b) => b.showFlat);
final hasExplicitChild = allItems.any((b) => b.child != null);
final List<TButtonGroupItem> effectiveItems;
if (!hasExplicitFlat && !hasExplicitChild && allItems.length <= 2) {
effectiveItems = allItems;
} else if (!hasExplicitFlat && !hasExplicitChild && allItems.length > 2) {
effectiveItems = [
TButtonGroupItem(
child: _buildActionDropdownMenu(ctx, allItems, isDense),
),
];
} else {
final flatButtons = <TButtonGroupItem>[];
final menuButtons = <TButtonGroupItem>[];
for (final btn in allItems) {
if (btn.showFlat || btn.child != null) {
flatButtons.add(btn);
} else {
menuButtons.add(btn);
}
}
effectiveItems = <TButtonGroupItem>[...flatButtons];
if (menuButtons.isNotEmpty) {
effectiveItems.add(TButtonGroupItem(
child: _buildActionDropdownMenu(ctx, menuButtons, isDense),
));
}
}
return TButtonGroup(
type: TButtonGroupType.icon,
alignment: WrapAlignment.end,
size: isDense ? TButtonSize.sm.copyWith(hPad: 4, vPad: 2) : TButtonSize.sm,
items: effectiveItems,
);
});