arena_listener 0.0.1 copy "arena_listener: ^0.0.1" to clipboard
arena_listener: ^0.0.1 copied to clipboard

A Listener that fights in gesture arenas.

arena_listener #

GestureDetector is too high level for you? Wish you had something similar to Listener that could fight with GestureDetectors in gesture arenas? Then this package is for you!

Features #

  • Listen for pointer events, exactly like a Listener.
  • Read the gesture disposition (accepted, refused, unresolved) of a pointer.
  • Try to resolve the arena (claim victory or admit defeat), or leave it unresolved.
  • Get notified when a pointer wins or looses the arena.

Usage #

import 'package:arena_listener/arena_listener.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const App());
}

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return ArenaListener(
      onPointerDown: (PointerDownEvent event) {
        print("${event.pointer} down");
        return null;
      },
      onPointerMove: (PointerMoveEvent event, GestureDisposition? disposition) {
        print("${event.pointer} move, $disposition");
        return null;
      },
      onPointerUp: (PointerUpEvent event, GestureDisposition? disposition) {
        print("${event.pointer} up, $disposition");
        return GestureDisposition.accepted;
      },
      onPointerCancel: (PointerCancelEvent event, GestureDisposition? disposition) {
        print("${event.pointer} cancel, $disposition");
        return GestureDisposition.rejected;
      },
      onWin: (PointerEvent lastEvent) {
        print("${lastEvent.pointer} won");
      },
      onLose: (PointerEvent lastEvent) {
        print("${lastEvent.pointer} lost");
      },
      child: GestureDetector(
        onVerticalDragUpdate: (_) {},
        child: Container(
          color: Colors.grey,
        ),
      ),
    );
  }
}

Note that if the arena is already resolved, the gesture disposition that you return will not change anything. Claiming victory or admitting defeat only works while the arena is unresolved.

Compile and run example/ for a more visual demo.

You can also use RawGestureRecognizer directly with a RawGestureDetector if the widget is not appropriate. Have a look at ArenaListener's code.

0
likes
140
pub points
39%
popularity

Publisher

unverified uploader

A Listener that fights in gesture arenas.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on arena_listener