Listener class

A widget that calls callbacks in response to common pointer events.

It listens to events that can construct gestures, such as when the pointer is pressed, moved, then released or canceled.

It does not listen to events that are exclusive to mouse, such as when the mouse enters, exits or hovers a region without pressing any buttons. For these events, use MouseRegion.

Rather than listening for raw pointer events, consider listening for higher-level gestures using GestureDetector.

Layout behavior

See BoxConstraints for an introduction to box layout models.

If it has a child, this widget defers to the child for sizing behavior. If it does not have a child, it grows to fit the parent instead.

This example makes a Container react to being touched, showing a count of the number of pointer downs and ups.
import 'package:flutter/widgets.dart';

// ...

int _downCounter = 0;
int _upCounter = 0;
double x = 0.0;
double y = 0.0;

void _incrementDown(PointerEvent details) {
  setState(() {
void _incrementUp(PointerEvent details) {
  setState(() {
void _updateLocation(PointerEvent details) {
  setState(() {
    x = details.position.dx;
    y = details.position.dy;

Widget build(BuildContext context) {
  return Center(
    child: ConstrainedBox(
      constraints: new BoxConstraints.tight(Size(300.0, 200.0)),
      child: Listener(
        onPointerDown: _incrementDown,
        onPointerMove: _updateLocation,
        onPointerUp: _incrementUp,
        child: Container(
          color: Colors.lightBlueAccent,
          child: Column(
            children: <Widget>[
              Text('You have pressed or released in this area this many times:'),
                '$_downCounter presses\n$_upCounter releases',
                style: Theme.of(context).textTheme.display1,
                'The cursor is here: (${x.toStringAsFixed(2)}, ${y.toStringAsFixed(2)})',



Listener({Key key, PointerDownEventListener onPointerDown, PointerMoveEventListener onPointerMove, @Deprecated('Use MouseRegion.onEnter instead') PointerEnterEventListener onPointerEnter, @Deprecated('Use MouseRegion.onExit instead') PointerExitEventListener onPointerExit, @Deprecated('Use MouseRegion.onHover instead') PointerHoverEventListener onPointerHover, PointerUpEventListener onPointerUp, PointerCancelEventListener onPointerCancel, PointerSignalEventListener onPointerSignal, HitTestBehavior behavior: HitTestBehavior.deferToChild, Widget child })
Creates a widget that forwards point events to callbacks. [...]


behavior HitTestBehavior
How to behave during hit testing.
onPointerCancel PointerCancelEventListener
Called when the input from a pointer that triggered an onPointerDown is no longer directed towards this receiver.
onPointerDown PointerDownEventListener
Called when a pointer comes into contact with the screen (for touch pointers), or has its button pressed (for mouse pointers) at this widget's location.
onPointerEnter PointerEnterEventListener
Called when a pointer enters the region for this widget. [...]
onPointerExit PointerExitEventListener
Called when a pointer leaves the region for this widget. [...]
onPointerHover PointerHoverEventListener
Called when a pointer that has not triggered an onPointerDown changes position. [...]
onPointerMove PointerMoveEventListener
Called when a pointer that triggered an onPointerDown changes position.
onPointerSignal PointerSignalEventListener
Called when a pointer signal occurs over this object.
onPointerUp PointerUpEventListener
Called when a pointer that triggered an onPointerDown is no longer in contact with the screen.
hashCode int
The hash code for this object. [...]
read-only, inherited
key Key
Controls how one widget replaces another widget in the tree. [...]
final, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited


build(BuildContext context) Widget
Describes the part of the user interface represented by this widget. [...]
createElement() StatelessElement
Creates a StatelessElement to manage this widget's location in the tree. [...]
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children. [...]
@protected, inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node. [...]
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
toDiagnosticsNode({String name, DiagnosticsTreeStyle style }) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep. [...]
toString({DiagnosticLevel minLevel: DiagnosticLevel.debug }) String
Returns a string representation of this object.
toStringDeep({String prefixLineOne: '', String prefixOtherLines, DiagnosticLevel minLevel: DiagnosticLevel.debug }) String
Returns a string representation of this node and its descendants. [...]
toStringShallow({String joiner: ', ', DiagnosticLevel minLevel: DiagnosticLevel.debug }) String
Returns a one-line detailed description of the object. [...]
toStringShort() String
A short, textual description of this widget.


operator ==(dynamic other) bool
The equality operator. [...]