TTableHeader<T, K>.tile constructor
TTableHeader<T, K>.tile (
- String text,
- String? title(
- T
- String? subtitle(
- T
- dynamic icon(
- T
- dynamic leading(
- T
- Color? iconColor(
- T
- Color? iconBackgroundColor(
- T
- TextStyle? titleStyle,
- TextStyle? subtitleStyle,
- double? iconSize,
- EdgeInsetsGeometry? iconPadding,
- BorderRadius? iconBorderRadius,
- double spacing = 10.0,
- CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center,
- Widget trailing(
- T
- int? flex,
- double? minWidth,
- double? maxWidth,
- Alignment? alignment,
- String? key,
- TFilterType? filterType = TFilterType.text,
- bool filterable = true,
- List<
TFilterOperator> ? filterOperators, - List? filterItems,
- TFilterDef<
T> ? filterDef, - double widthEstimator(
- T data
- bool flattenOnMobile = false,
- String mobileKeyPrefixBuilder()?,
- List<
TKeyValue> keyValuesBuilder(- T data
Creates a header for displaying a title and optional subtitle with leading icon using TTile.
Implementation
TTableHeader.tile(
this.text,
String? Function(T) title, {
String? Function(T)? subtitle,
dynamic Function(T)? icon,
dynamic Function(T)? leading,
Color? Function(T)? iconColor,
Color? Function(T)? iconBackgroundColor,
TextStyle? titleStyle,
TextStyle? subtitleStyle,
double? iconSize,
EdgeInsetsGeometry? iconPadding,
BorderRadius? iconBorderRadius,
double spacing = 10.0,
CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center,
Widget Function(T)? trailing,
this.flex,
this.minWidth,
this.maxWidth,
this.alignment,
this.key,
this.filterType = TFilterType.text,
this.filterable = true,
this.filterOperators,
this.filterItems,
this.filterDef,
double Function(T data)? widthEstimator,
this.flattenOnMobile = false,
this.mobileKeyPrefixBuilder,
this.keyValuesBuilder,
}) : map = title,
widthEstimator = widthEstimator ??
((data) {
final t = title(data);
final sub = subtitle?.call(data);
final tWidth = t != null ? TTableTheme.measureTextWidth(t) : 0.0;
final sWidth = sub != null ? TTableTheme.measureTextWidth(sub) * 0.85 : 0.0;
final textWidth = math.max(tWidth, sWidth);
final lead = leading?.call(data) ?? icon?.call(data);
final hasIcon = lead != null;
final iconWidth = hasIcon ? ((iconSize ?? (lead is Widget ? 80.0 : 20.0)) + 12.0 + spacing) : 0.0;
final trailingWidth = trailing != null ? 30.0 : 0.0;
return iconWidth + textWidth + trailingWidth;
}),
builder = ((ctx, item, __) {
final scope = TTableScope.maybeOf(ctx);
final isDense = scope?.dense ?? false;
final t = title(item.data);
final sub = subtitle?.call(item.data);
final lead = leading?.call(item.data) ?? icon?.call(item.data);
final icColor = iconColor?.call(item.data);
final icBgColor = iconBackgroundColor?.call(item.data);
final tr = trailing?.call(item.data);
final contentStyle = scope?.contentTextStyle ?? ctx.theme.tableTheme.rowCardTheme.contentTextStyle;
final defaultTitleStyle = contentStyle?.adjust(
sizeMultiplier: 1.015,
);
final defaultSubtitleStyle = contentStyle?.adjust(
color: contentStyle.color?.adaptiveContrast(ctx, -0.5),
sizeMultiplier: 0.85,
);
return TTile(
title: t,
subtitle: sub,
icon: lead,
iconColor: icColor,
iconBackgroundColor: icBgColor,
iconSize: isDense ? (iconSize != null ? iconSize * 0.8 : 16.0) : (iconSize ?? 20.0),
iconPadding: isDense ? const EdgeInsets.all(6) : iconPadding,
iconBorderRadius: iconBorderRadius,
spacing: isDense ? spacing * 0.75 : spacing,
crossAxisAlignment: crossAxisAlignment,
titleStyle: titleStyle ?? defaultTitleStyle,
subtitleStyle: subtitleStyle ?? defaultSubtitleStyle,
trailing: tr,
);
});