buildDefaultTab<T> static method

Widget buildDefaultTab<T>({
  1. required BuildContext context,
  2. required TTab<T> tab,
  3. required bool isSelected,
  4. required ColorScheme colors,
  5. required GlobalKey<State<StatefulWidget>> tabKey,
  6. required Axis axis,
  7. EdgeInsets? tabPadding,
  8. required double? indicatorWidth,
  9. Color? selectedColor,
  10. Color? unselectedColor,
  11. Color? disabledColor,
  12. Color? indicatorColor,
  13. TTabController<T>? controller,
  14. 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),
      ),
    ),
  );
}