resolve method

void resolve(
  1. int arenaKey,
  2. GestureRecognizer member,
  3. GestureDisposition disposition
)

A member resolves with a given disposition.

If disposition is GestureDisposition.accepted, the member wins and all other members are rejected. If all members reject, the arena is closed.

Implementation

void resolve(
  int arenaKey,
  GestureRecognizer member,
  GestureDisposition disposition,
) {
  final arena = _arenas[arenaKey];
  if (arena == null) return;

  if (disposition == GestureDisposition.accepted) {
    // This member wins — accept it, reject everyone else.
    for (final other in arena.members) {
      if (other != member) {
        other.rejectGesture();
      }
    }
    member.acceptGesture();
    _arenas.remove(arenaKey);
  } else {
    // Member rejects itself — remove it from the arena.
    arena.members.remove(member);
    member.rejectGesture();

    // If only one member remains, it wins by default.
    if (arena.members.length == 1) {
      arena.members.first.acceptGesture();
      _arenas.remove(arenaKey);
    } else if (arena.members.isEmpty) {
      _arenas.remove(arenaKey);
    }
  }
}