To listen to pointer events directly from the widgets layer, use a
Listener widget. However, generally,
consider using gestures (as discussed below) instead.

Gestures

Gestures represent semantic actions (for example, tap, drag,
and scale) that are recognized from multiple individual pointer
events, potentially even multiple individual pointers.
Gestures can dispatch multiple events, corresponding to the
lifecycle of the gesture (for example, drag start,
drag update, and drag end):

Tap

A pointer that might cause a tap has contacted
the screen at a particular location.

A pointer that will trigger a tap has stopped contacting
the screen at a particular location.

The pointer that previously triggered the onTapDown
has also triggered onTapUp which ends up causing a tap.

The pointer that previously triggered the onTapDown
will not end up causing a tap.

Double tap

The user has tapped the screen at the same location twice in
quick succession.