wrapWithNodeTooltip<T> function
Widget
wrapWithNodeTooltip<T>({
- required Widget child,
- required NodeTooltipTheme<
T> ? tooltipTheme, - 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,
);
}