CodeBlanks Logo Icon CodeBlanks

GestureDetector nedir?

GestureDetector ile dokunma olaylarını yakalamayı öğrenirsin.

GestureDetector nedir?

GestureDetector, child widget'ına dokunma, çift dokunma, uzun basma gibi hareketleri dinleyen bir widget'tır. Kendi görsel bir efekti yoktur; sadece child parametresine verdiğin widget'ı sarmalar ve üzerindeki hareketleri yakalar. Hareket gerçekleştiğinde verdiğin callback fonksiyonu çağrılır.

GestureDetector(
  onTap: () {
    print('Dokunuldu');
  },
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
  ),
)

child parametresi

GestureDetector, child parametresine verdiğin widget üzerindeki hareketleri dinler. child olmadan dinlenecek bir alan oluşmaz; bu yüzden child neredeyse her zaman verilir. Çocuk ne kadar büyükse dokunma alanı da o kadar geniş olur.

GestureDetector(
  onTap: () => print('Tik'),
  child: Text('Buraya dokun'),
)

Uygulama onTap callback'i yaz

dokunmaOlayi adında bir fonksiyon yaz. Çağrılınca Dokunuldu yazdırmalı. Ana main içinde bu fonksiyonu çağır ve GestureDetector'a onTap olarak bağla.

Başlangıç kodu

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

// dokunmaOlayi adinda bir fonksiyon yaz.
// Cagrilinca "Dokunuldu" metnini yazdirmali.

void main() {
  // dokunmaOlayi fonksiyonunu cagir
  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 parametresini dokunmaOlayi fonksiyonuna bagla
            child: Container(
              width: 100,
              height: 100,
              color: Colors.blue,
            ),
          ),
        ),
      ),
    );
  }
}

Örnek çözüm

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

void dokunmaOlayi() {
  print('Dokunuldu');
}

void main() {
  dokunmaOlayi();
  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: dokunmaOlayi,
            child: Container(
              width: 100,
              height: 100,
              color: Colors.blue,
            ),
          ),
        ),
      ),
    );
  }
}

Beklenen çıktı

Dokunuldu

Soru ve cevaplar

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

1 GestureDetector'ın kendisi görsel bir etki yapar mı?

  • Evet, çocuk widget'ı gizler
  • Evet, etrafına çerçeve çizer
  • Hayır, yalnızca hareketleri dinler Doğru cevap
  • Evet, arka plan rengini değiştirir

Açıklama: GestureDetector görünmezdir; görsel değişiklik yapmaz. Yalnızca child'ı sarmalar ve hareketleri dinler.

2 onTap parametresini ekle

Soru
GestureDetector(
  child: Container(
    width: 80,
    height: 80,
    color: Colors.red,
  ),
  ____: () => print('Merhaba'),
)
Cevap
GestureDetector(
  child: Container(
    width: 80,
    height: 80,
    color: Colors.red,
  ),
  onTap: () => print('Merhaba'),
)

Açıklama: GestureDetector'da tek dokunuş callback'i onTap parametresi ile verilir.

3 GestureDetector parçaları

Kavram Anlamı
GestureDetector Dokunma hareketlerini dinler
onTap Tek dokunuş callback'i
child Hareketin dinlendiği widget
callback Olay gerçekleşince çağrılan fonksiyon

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