wrapWithNodeTooltip<T> function

Widget wrapWithNodeTooltip<T>({
  1. required Widget child,
  2. required NodeTooltipTheme<T>? tooltipTheme,
  3. required Node<T> node,
})

Wraps child in a JustTooltip built from tooltipTheme, or returns child unchanged when tooltips are disabled or there is no content.

Implementation

Widget wrapWithNodeTooltip<T>({
  required Widget child,
  required NodeTooltipTheme<T>? tooltipTheme,
  required Node<T> node,
}) {
  if (tooltipTheme == null || !tooltipTheme.useTooltip) {
    return child;
  }

  // Resolve tooltip content: tooltipBuilderResolver > tooltipBuilder > message
  WidgetBuilder? resolvedBuilder;
  if (tooltipTheme.tooltipBuilderResolver != null) {
    resolvedBuilder = tooltipTheme.tooltipBuilderResolver?.call(node);
  }
  resolvedBuilder ??= tooltipTheme.tooltipBuilder;

  final String? message = tooltipTheme.message;

  if (resolvedBuilder == null && (message == null || message.isEmpty)) {
    return child;
  }

  return JustTooltip(
    direction: tooltipTheme.direction,
    alignment: tooltipTheme.alignment,
    anchor: tooltipTheme.anchor,
    offset: tooltipTheme.offset,
    crossAxisOffset: tooltipTheme.crossAxisOffset,
    screenMargin: tooltipTheme.screenMargin ?? 8.0,
    theme: JustTooltipTheme(
      textStyle: tooltipTheme.textStyle,
      backgroundColor: tooltipTheme.backgroundColor ?? const Color(0xFF616161),
      borderRadius: tooltipTheme.borderRadius ??
          const BorderRadius.all(Radius.circular(6)),
      padding: tooltipTheme.padding ??
          const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
      elevation: tooltipTheme.elevation ?? 4.0,
      boxShadow: tooltipTheme.boxShadow,
      borderColor: tooltipTheme.borderColor,
      borderWidth: tooltipTheme.borderWidth ?? 0.0,
      showArrow: tooltipTheme.showArrow ?? false,
      arrowBaseWidth: tooltipTheme.arrowBaseWidth ?? 12.0,
      arrowLength: tooltipTheme.arrowLength ?? 6.0,
      arrowPositionRatio: tooltipTheme.arrowPositionRatio ?? 0.25,
    ),
    controller: tooltipTheme.controller,
    enableTap: tooltipTheme.enableTap ?? false,
    enableHover: tooltipTheme.enableHover ?? true,
    animation: tooltipTheme.animation ?? TooltipAnimation.fade,
    animationCurve: tooltipTheme.animationCurve,
    fadeBegin: tooltipTheme.fadeBegin ?? 0.0,
    scaleBegin: tooltipTheme.scaleBegin ?? 0.0,
    slideOffset: tooltipTheme.slideOffset ?? 0.3,
    rotationBegin: tooltipTheme.rotationBegin ?? -0.05,
    animationDuration:
        tooltipTheme.animationDuration ?? const Duration(milliseconds: 150),
    onShow: tooltipTheme.onShow,
    onHide: tooltipTheme.onHide,
    interactive: tooltipTheme.interactive ?? false,
    waitDuration: tooltipTheme.waitDuration,
    showDuration: tooltipTheme.showDuration,
    hideOnEmptyMessage: tooltipTheme.hideOnEmptyMessage ?? true,
    message: resolvedBuilder == null ? message : null,
    tooltipBuilder: resolvedBuilder,
    child: child,
  );
}