CodeBlanks Logo Icon CodeBlanks

onTap callback

InkWell onTap ile tıklamayı işleyip geri bildirim vermeyi öğrenirsin.

onTap ve ScaffoldMessenger

InkWell'in onTap callback'i, dokunma gerçekleştiğinde istediğin kodu çalıştırır. Genellikle kullanıcıya geri bildirim vermek için ScaffoldMessenger.of(context).showSnackBar(...) çağrılır. SnackBar, ekranın altında kısa süreli bir mesaj gösterir ve context gerektirdiği için callback içinde kullanılır.

InkWell(
  onTap: () {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Merhaba')),
    );
  },
  child: Text('Dokun'),
)

ScaffoldMessenger ve context

ScaffoldMessenger, uygulama genelinde SnackBar gibi mesajları yönetir. ScaffoldMessenger.of(context) ifadesi, widget ağacındaki en yakın ScaffoldMessenger'a erişir; bu yüzden callback içinde context kullanılmalıdır. SnackBar widget'ı, içeride gösterilecek mesajı taşır.

Uygulama InkWell ile SnackBar göster

mesajGoster adında bir fonksiyon yaz; çağrılınca Mesaj gosterildi yazdırsın. main içinde mesajGoster'i çağır. InkWell'ın onTap'inde hem mesajGoster'i çağır hem de ScaffoldMessenger.of(context).showSnackBar ile bir SnackBar göster.

Başlangıç kodu

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

// mesajGoster fonksiyonu yaz: "Mesaj gosterildi" yazdirsin

void main() {
  // mesajGoster'i cagir
  runApp(const Uygulama());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Material(
            child: InkWell(
              // onTap ekle: mesajGoster cagir + SnackBar goster
              child: Container(
                width: 100,
                height: 100,
                color: Colors.purple,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Örnek çözüm

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

void mesajGoster() {
  print('Mesaj gosterildi');
}

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Material(
            child: InkWell(
              onTap: () {
                mesajGoster();
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Merhaba')),
                );
              },
              child: Container(
                width: 100,
                height: 100,
                color: Colors.purple,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Beklenen çıktı

Mesaj gosterildi

Soru ve cevaplar

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

1 SnackBar'i ekranda göstermek için hangi ifade kullanılır?

  • print(...)
  • runApp(...)
  • ScaffoldMessenger.of(context).showSnackBar(...) Doğru cevap
  • Material(...)

Açıklama: ScaffoldMessenger.of(context) ile erişilen nesnenin showSnackBar metodu SnackBar'i ekranda gösterir.

2 ScaffoldMessenger'a eriş

Soru
InkWell(
  onTap: () {
    ____.of(context).showSnackBar(
      SnackBar(content: Text('Merhaba')),
    );
  },
  child: Text('Dokun'),
)
Cevap
InkWell(
  onTap: () {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Merhaba')),
    );
  },
  child: Text('Dokun'),
)

Açıklama: SnackBar'ı göstermek için ScaffoldMessenger.of(context) ile messenger'a erişilir.

3 Geri bildirim parçaları

Kavram Anlamı
onTap InkWell'ın dokunma callback'i
ScaffoldMessenger SnackBar'a erişimi sağlar
showSnackBar SnackBar'ı ekranda gösterir
SnackBar Alt tarafta beliren mesaj

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