Tooltip onTap rather than onLongPress possible?


1. Easiest way is to use:

triggerMode: TooltipTriggerMode.tap

Here's an example:

Tooltip(
  triggerMode: TooltipTriggerMode.tap,
  message: 'this is something',
  child: SizedBox(...),
)

2. First, define globalkey: GlobalKey _toolTipKey = GlobalKey(); Then wrap your tooltip:

GestureDetector(
  onTap: () {
    final dynamic _toolTip = _toolTipKey.currentState;
    _toolTip.ensureTooltipVisible();
  },
  child: Tooltip(
    key: _toolTipKey,
    message: "Your message",
    child: Icon(
        Icons.info,
      ),
    ),
),


3. Another way to get the functionality you need is to clone the original Tooltip widget (call it e.g. TooltipCustom) and change inner GestureDetector behavior.

Particularly replace onLongPress to onTap:

class TooltipCustom extends StatefulWidget {
  /// Creates a tooltip.
  ...
  @override
  Widget build(BuildContext context) {
    ...
    Widget result = GestureDetector(
      behavior: HitTestBehavior.opaque,
      onTap: _handleLongPress,
      excludeFromSemantics: true,
      child: Semantics(
        label: excludeFromSemantics ? null : widget.message,
        child: widget.child,
      ),
    );
    ...
    return result;
  }
}

P.S. It's possible to lose a tooltip hiding feature. Take a look at _handlePointerEvent(PointerEvent event) handler function and realize a proper call of _hideTooltip() method.


 

Post a Comment

Previous Post Next Post

Subscribe Us


Get tutorials, Flutter news and other exclusive content delivered to your inbox. Join 1000+ growth-oriented Flutter developers subscribed to the newsletter

100% value, 0% spam. Unsubscribe anytime