buildDefaultTab<T> static method
Widget
buildDefaultTab<T>({
- required BuildContext context,
- required TTab<
T> tab, - required bool isSelected,
- required ColorScheme colors,
- required GlobalKey<
State< tabKey,StatefulWidget> > - required Axis axis,
- EdgeInsets? tabPadding,
- required double? indicatorWidth,
- Color? selectedColor,
- Color? unselectedColor,
- Color? disabledColor,
- Color? indicatorColor,
- TTabController<
T> ? controller, - VoidCallback? onTab,
Builds a default tab widget with standard styling.
Implementation
static Widget buildDefaultTab<T>({
required BuildContext context,
required TTab<T> tab,
required bool isSelected,
required ColorScheme colors,
required GlobalKey tabKey,
required Axis axis,
EdgeInsets? tabPadding,
required double? indicatorWidth,
Color? selectedColor,
Color? unselectedColor,
Color? disabledColor,
Color? indicatorColor,
TTabController<T>? controller,
VoidCallback? onTab,
}) {
final defaultSelectedColor = selectedColor ?? colors.onPrimaryContainer;
final defaultUnselectedColor = unselectedColor ?? colors.onSurface;
final defaultDisabledColor = disabledColor ?? colors.onSurfaceVariant;
final defaultIndicatorColor = indicatorColor ?? colors.primary;
final color = tab.isEnabled ? (isSelected ? defaultSelectedColor : defaultUnselectedColor) : defaultDisabledColor;
final indicatorBorder = isSelected
? (axis == Axis.horizontal
? Border(bottom: BorderSide(color: defaultIndicatorColor, width: indicatorWidth ?? 1))
: Border(right: BorderSide(color: defaultIndicatorColor, width: indicatorWidth ?? 1)))
: null;
// For vertical tabs on mobile, show only icons to prevent overflow
final isMobile = MediaQuery.of(context).size.width < 600;
final showTextInVertical = axis == Axis.horizontal || !isMobile;
final content = axis == Axis.horizontal
? _buildHorizontalTabContent(
tab: tab,
color: color,
isSelected: isSelected,
defaultIndicatorColor: defaultIndicatorColor,
)
: _buildVerticalTabContent(
tab: tab,
color: color,
isSelected: isSelected,
defaultIndicatorColor: defaultIndicatorColor,
showText: showTextInVertical,
);
return Container(
key: tabKey,
decoration: BoxDecoration(border: indicatorBorder),
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: onTab,
child: Container(
padding: tabPadding ??
(axis == Axis.horizontal
? const EdgeInsets.symmetric(vertical: 6, horizontal: 8)
: const EdgeInsets.symmetric(vertical: 4, horizontal: 8)),
child: content),
),
),
);
}