CodeBlanks Logo Icon CodeBlanks

onTap ve onDoubleTap

onTap ve onDoubleTap arasındaki farkı öğrenirsin.

onTap ve onDoubleTap

onTap, kullanıcı widget'a tek dokunduğunda çağrılır. onDoubleTap ise kısa süre içinde iki kez dokunulunca çağrılır. İkisini aynı GestureDetector'a verebilirsin; Flutter hangi hareketin gerçekleştiğini çözer ve uygun callback'i çağırır.

GestureDetector(
  onTap: () => print('Tek'),
  onDoubleTap: () => print('Cift'),
  child: Container(width: 80, height: 80),
)

Bekleme süresi

onTap ve onDoubleTap birlikte verildiyse, Flutter tek dokunuş mu yoksa çift dokunuş mu olduğunu anlamak için kısa bir süre bekler. Bu yüzden onTap, tek başına kullanıldığından biraz daha gecikmeli çağrılabilir. Yalnızca onTap verdiysen bu gecikme olmaz.

Uygulama onTap ve onDoubleTap bağla

tekDokunus adında bir fonksiyon yaz; çağrılınca Tek yazdırsın. ciftDokunus adında başka bir fonksiyon yaz; Cift yazdırsın. main içinde tekDokunus'u çağır ve GestureDetector'a hem onTap hem onDoubleTap bağla.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';

// 1. tekDokunus fonksiyonunu yaz: "Tek" yazdirsin
// 2. ciftDokunus fonksiyonunu yaz: "Cift" yazdirsin
// 3. main icinde tekDokunus'u cagir
// 4. GestureDetector'a onTap ve onDoubleTap bagla

void main() {
  // tekDokunus cagrisini ekle
  runApp(const Uygulama());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: GestureDetector(
            // onTap ve onDoubleTap parametrelerini ekle
            child: Container(
              width: 100,
              height: 100,
              color: Colors.green,
            ),
          ),
        ),
      ),
    );
  }
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';

void tekDokunus() {
  print('Tek');
}

void ciftDokunus() {
  print('Cift');
}

void main() {
  tekDokunus();
  runApp(const Uygulama());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: GestureDetector(
            onTap: tekDokunus,
            onDoubleTap: ciftDokunus,
            child: Container(
              width: 100,
              height: 100,
              color: Colors.green,
            ),
          ),
        ),
      ),
    );
  }
}

Beklenen çıktı

Tek

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir GestureDetector'da hem onTap hem onDoubleTap verirsen ne olur?

  • Derleme hatası verir, ikisi aynı anda verilemez
  • Yalnızca onTap çağrılır, onDoubleTap yok sayılır
  • Flutter hangi hareketin gerçekleştiğini çözer ve uygun callback'i çağırır Doğru cevap
  • Yalnızca onDoubleTap çağrılır, onTap yok sayılır

Açıklama: Flutter, dokunuşun tek mi çift mi olduğunu algılar ve yalnızca uygun callback'i çağırır. İkisi birlikte kullanılabilir.

2 onDoubleTap parametresini ekle

Soru
GestureDetector(
  onTap: () => print('Tek'),
  ____: () => print('Cift'),
  child: Text('X'),
)
Cevap
GestureDetector(
  onTap: () => print('Tek'),
  onDoubleTap: () => print('Cift'),
  child: Text('X'),
)

Açıklama: Çift dokunuş callback'i onDoubleTap parametresi ile verilir; başka isimle çalışmaz.

3 Dokunma callback'leri

Kavram Anlamı
onTap Tek dokunuş
onDoubleTap Çift dokunuş
callback Olay gerçekleşince çağrılan fonksiyon
child Hareketin dinlendiği widget

Başlangıç bölümündeki tüm dersler