CodeBlanks Logo Icon CodeBlanks

onLongPress

onLongPress ile uzun basma hareketini yakalamayı öğrenirsin.

onLongPress

onLongPress, parmağı widget üzerinde yaklaşık 500 milisaniye boyunca basılı tuttuğunda çağrılır. Tek dokunuştan farklı olarak belirli bir süre beklemek gerekir; bu yüzden bağlam menüleri veya "diğer seçenekler" gibi eylemler için uygundur.

GestureDetector(
  onTap: () => print('Tek'),
  onLongPress: () => print('Uzun basildi'),
  child: Container(width: 80, height: 80),
)

onLongPress süresi

GestureDetector'ın uzun basma süresini ayarlayan bir parametresi yoktur; süre sabittir. Daha ince ayar için alt seviye sınıflar gerekir, ama bu dersin konusu dışındadır. Çoğu durumda varsayılan süre yeterlidir ve ayrı bir ayar yapmazsın.

Uygulama onLongPress ile uzun basmayı yakala

uzunBasma adında bir fonksiyon yaz; çağrılınca Uzun basildi yazdırsın. main içinde uzunBasma'yı çağır ve GestureDetector'a onTap olarak boş bir fonksiyon, onLongPress olarak uzunBasma ver.

Başlangıç kodu

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

// uzunBasma fonksiyonu "Uzun basildi" yazdirmali
// GestureDetector'a onTap ve onLongPress bagla

void main() {
  // uzunBasma'yi 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 ve onLongPress parametrelerini ekle
            child: Container(
              width: 100,
              height: 100,
              color: Colors.red,
            ),
          ),
        ),
      ),
    );
  }
}

Örnek çözüm

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

void uzunBasma() {
  print('Uzun basildi');
}

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

Beklenen çıktı

Uzun basildi

Soru ve cevaplar

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

1 onLongPress ne zaman tetiklenir?

  • Parmak bir süre basılı tutulunca Doğru cevap
  • Çift dokununca
  • Hemen dokununca
  • Yatay sürükleyince

Açıklama: onLongPress için parmağın widget üzerinde belirli bir süre (yaklaşık 500 ms) basılı kalması gerekir.

2 onLongPress parametresini ekle

Soru
GestureDetector(
  onTap: () => print('Tek'),
  ____: () => print('Uzun'),
  child: Text('B'),
)
Cevap
GestureDetector(
  onTap: () => print('Tek'),
  onLongPress: () => print('Uzun'),
  child: Text('B'),
)

Açıklama: Uzun basma callback'i onLongPress parametresi ile verilir; onPress, onHold veya onLongPress geçerli değildir.

3 Uzun basma parçaları

Kavram Anlamı
onLongPress Uzun basma callback'i
500 ms Yaklaşık bekleme süresi
onTap Kısa dokunuş callback'i
child Hareketi yakalanan widget

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