DEV Community 👩‍💻👨‍💻

Cover image for Flutter "Farkları Ne? 😕" Serisi
Gülsen Keskin
Gülsen Keskin

Posted on

Flutter "Farkları Ne? 😕" Serisi

Merhaba! Flutter 'da benzer görünen işlevlerin farklarını irdelemeye yönelik bir seri oluşturmaya karar verdim. Sizin de aklınıza takılan "Bunlar aynı değil mi? Ne farkları var ki?" diye düşündüren konuları yorum yapın birlikte araştırıp öğrenelim 😀

Bölüm 1 😀

Navigator.pop(context); ve Navigator.of(context).pop(); arasındaki fark nedir?

Her iki yöntemde mevcut rotayı yığından çıkararak bir önceki rotayı gösterir iki method arasındaki tek fark of() static methodudur. Of() static methodu verilen context'i kapsayan bu sınıfın en yakın örneğinin(instance) durumunu verir.

Navigator.of(context) methodunun Navigator widget'ına doğrudan bir referansı yoktur ve rotalar üzerinde işlem yapabilmek için verilen BuildContext'in en yakın atası olan Navigator'ı kullanır. Bu, özellikle iç içe rotalarla çalışırken veya Navigator widget ağacında birkaç seviye yukarıdayken yararlı olabilir.

Navigator.pop(context) yöntemi ise, çağrıldığı yerde geçerli olan BuildContext nesnesini kullanarak Navigator sınıfının bir örneğini elde eder ve bu örneği kullanarak yönlendirme işlemlerini gerçekleştirir.

Navigator widget'ına doğrudan referansınız olmadığında (Bu Navigator iç içe rotalarla çalışıyorsanız ve Navigator'a doğrudan erişilemiyorsa olabilir.) Bu durumlarda, verilen BuildContext'in en yakın atası olan Navigator'ı elde etmek için Navigator.of(context) yöntemini kullanabilirsiniz.

Bu örnekte, MyWidget widget'ının Navigator widget'ına doğrudan bir referansı yoktur. Navigator, MaterialApp widget'ının içinde, widget ağacının birkaç seviye yukarısındadır. Navigator.of(context) methodu sayesinde verilen BuildContext'in en yakın atası Navigator'ı elde edebilirsiniz:

import 'package:flutter/material.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('My App'),
      ),
      body: Center(
        child: MyWidget(),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('My Widget'),
      ),
      body: Center(
        child: TextButton(
          onPressed: () {
            // Burada navigator widget'ına doğrudan bir referansınız yoktur
          },
          child: const Text('Go to another screen'),
        ),
      ),
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

Kaynaklar:
https://api.flutter.dev/flutter/widgets/Navigator/of.html
https://api.flutter.dev/flutter/widgets/Navigator-class.html
https://stackoverflow.com/a/71616934/14745090

Top comments (2)

Collapse
 
mehmetyaz profile image
Mehmet Yaz •

Selamlar. Öncelikle başladığın bu seri için teşekkürler. Faydalı bir iş olacağı kesin. Fakat düzeltme ihtiyacı hissettiğim bir şey var.
DM kapalı olduğu için burdan belirtiyorum ki:

Bu bilgi yanıltıcı ve kafa karıştırıcı olabilir. Zira "(1) Navigator.of(context).someMethod()" ile "(2) Navigator.someMethod(context)" arasında hiçbir işlevsel fark yok. Biri instance method, diğeri static method. Birinde instance a ulaşmak için of(BuildContext) metodunu kullanıyoruz, diğerinde static method aynı "of" metodunu kullanarak instance a ulaşıp gerekli metodu çağırıyor.

Instance a ulaşmak için context i kullanıyoruz ve 1. Örnekte of ile Navigator instance'ına ulaşırken ikincide o static metod ulaştığı için BuildContext i ona veriyoruz.
Dilersen kaynak kodlarına bakabilirsin.

Collapse
 
gulsenkeskin profile image
Gülsen Keskin Author •

Cevabınız için çok teşekkür ederim. Biraz daha araştırıp güncelleyeceğim 😀

🗣 Want to join the conversation?

It's easy! Become a DEV member to follow this post, comment, and more.