Godot Engine – Sık Kullanılan Fonksiyonlar

Godot oyun motoru, oyun geliştirme sürecini kolaylaştırmak için bir dizi kullanışlı fonksiyon ve özellik içerir. En sık kullanılan bazı Godot fonksiyonları:

  1. _ready() veya _init(): Bu işlevler, bir düğümün veya nesnenin sahneye eklenmesi veya başlatılması sırasında çağrılır. Genellikle başlangıç ayarlarını yapmak veya özel başlangıç kodunu çalıştırmak için kullanılır.
  2. _process(delta): Bu işlev, her karede bir kez çağrılır ve genellikle oyun nesnelerinin her çerçevede nasıl güncelleneceğini belirlemek için kullanılır. “delta” parametresi, zaman adımları arasındaki süreyi temsil eder.
  3. _physics_process(delta): Fizik tabanlı oyunlar için _process() benzeri bir işlevdir, ancak bu işlev, fizik tabanlı hesaplamaları yapmak için kullanılır. Bu, nesnelerin fiziksel davranışlarını yönetmek için önemlidir.
  4. get_node(path): Bu fonksiyon, düğüm ağacındaki başka bir düğümü bulmak için kullanılır. “path” parametresi, düğümün sahne ağacındaki konumunu belirler.
  5. connect(signal, target, method): Bu işlev, bir sinyali bir işlevle bağlamak için kullanılır. Örneğin, bir düğümün tıklama sinyalini bir işlevle ilişkilendirebilirsiniz.
  6. instance(): veya preload(path): Bu işlevler, sahnede veya kaynaklarda bulunan nesneleri klonlamak veya yüklemek için kullanılır. instance() o anlık bir nesne yaratırken, preload(path) bir kaynağı önceden yükler.
  7. queue_free(): Bu fonksiyon, bir düğümü bellekten serbest bırakmak ve yok etmek için kullanılır. Oyun nesnelerini silmek için sıkça kullanılır.
  8. emit_signal(signal, ...args): Bu işlev, özel sinyalleri tetiklemek için kullanılır. Sinyal adı ve isteğe bağlı olarak ekstra argümanlar verilebilir.
  9. get_input_event(): Bu işlev, kullanıcının giriş etkinliklerini almak için kullanılır. Fare tıklamaları, klavye tuş vuruşları gibi etkinlikleri işlemek için kullanılabilir.
  10. get_viewport().get_mouse_position(): Bu işlev, fare pozisyonunu almak için kullanılır. Bu, kullanıcı etkileşimlerini işlemek için sıklıkla kullanılır.

Godot Engine – Avantajları ve Dezavantajları

Godot Engine, popüler Unity ve Unreal Engine gibi diğer oyun motorlarına göre, 2023 yılında yapılan kıyaslamalarda farklı avantajlara ve dezavantajlara sahiptir. Bu üç oyun motorunu karşılaştırdığımızda;

Godot Engine:

Artıları:

  1. Ücretsiz ve Açık Kaynaklı: Godot Engine, ücretsizdir ve açık kaynaklı bir lisansa sahiptir, bu da maliyetleri azaltır ve kodunuzu özelleştirmenize izin verir.
  2. Hafif ve Hızlı: Godot, daha hafif bir motor olarak bilinir ve düşük sistem gereksinimlerine sahiptir, bu nedenle daha küçük projeler veya eski cihazlar için uygundur.
  3. Düşük Öğrenme Eğrisi: Kullanıcı dostu bir arayüze sahiptir ve GDScript gibi kolay öğrenilen programlama dillerini destekler.
  4. Çoklu Platform Desteği: Birden fazla platformda oyun geliştirmeyi destekler.
  5. Topluluk ve Dökümantasyon: Godot, büyük ve aktif bir topluluğa sahiptir ve kapsamlı dökümantasyon sunar.

Eksileri:

  1. Daha Az 3D Odaklı: Godot, 3D oyunlar için Unity veya Unreal Engine kadar güçlü olmayabilir.
  2. Daha Az Pazarlama ve Destek: Unity ve Unreal Engine gibi diğer motorlar, daha büyük bir pazarlama ve destek ekosistemine sahiptir.

Unity:

Artıları:

  1. Geniş Platform Desteği: Unity, birçok platformu destekler, bu da oyununuzun çoklu platformlarda yayınlanmasını kolaylaştırır.
  2. Varlık Mağazası: Unity Asset Store, hazır varlıkların ve eklentilerin geniş bir koleksiyonunu sunar.
  3. Gelişmiş 3D Yetenekleri: Unity, 3D oyun geliştirme için güçlü araçlar sunar.
  4. Büyük Topluluk ve Destek: Büyük bir kullanıcı topluluğuna ve destek ekosistemine sahiptir.

Eksileri:

  1. Ücretli Sürümler: Unity Pro ve Unity Plus gibi gelişmiş özellikler için ücretli sürümleri vardır.
  2. Öğrenme Eğrisi: Unity, bazı kullanıcılar için öğrenmesi daha zor olabilir.

Unreal Engine:

Artıları:

  1. Güçlü Grafikler ve 3D: Unreal Engine, üst düzey grafikler ve 3D oyun geliştirme için güçlüdür.
  2. Mükemmel 3D Desteği: Oyun geliştirmenin yanı sıra simülasyonlar ve görselleştirmeler için de kullanılabilir.
  3. Mükemmel VR ve AR Desteği: Unreal Engine, sanal gerçeklik ve artırılmış gerçeklik projeleri için popüler bir seçenektir.
  4. Gelişmiş Öğrenme Kaynakları: Unreal Engine, eğitim ve öğrenme kaynaklarına sahiptir.

Eksileri:

  1. Ağırlık ve Yüksek Sistem Gereksinimleri: Unreal Engine, daha yüksek sistem gereksinimlerine sahiptir ve daha büyük projeler için daha fazla kaynağa ihtiyaç duyar.
  2. Öğrenme Eğrisi: Unreal Engine, Unity ve Godot’a göre daha karmaşıktır ve öğrenmesi daha uzun sürebilir.
  3. Ücretli Lisanslama: Unreal Engine, oyununuzun ticari bir başarı elde etmesi durumunda bir ücret talep eder.

Hangi oyun motorunun sizin için en iyi olduğu, projenizin gereksinimlerine ve kendi deneyim ve tercihlerinize bağlıdır. Küçük veya bağımsız bir geliştiriciyseniz ve 2D oyunlar geliştirmeyi düşünüyorsanız, Godot Engine cazip olabilir. Büyük bir 3D proje üzerinde çalışıyorsanız, Unity veya Unreal Engine daha iyi bir seçenek olabilir.

Godot Engine Hakkında

Godot Engine, açık kaynaklı ve ücretsiz olarak kullanılabilen bir oyun motorudur. Godot Engine’i diğer oyun motorlarıyla karşılaştırırken göz önünde bulundurabileceğiniz bazı önemli faktörler:

  1. Ücretsiz ve Açık Kaynaklı: Godot Engine, ücretsizdir ve açık kaynaklı bir lisansa sahiptir. Bu, oyun geliştirme maliyetlerinizi düşürebilir ve kodunuzu özelleştirmenize veya paylaşmanıza olanak tanır.
  2. Çok Platform Desteği: Godot, birden fazla platformda oyun geliştirmeyi destekler. Windows, macOS, Linux, iOS, Android, HTML5, ve daha pek çok platformda oyunlar oluşturabilirsiniz.
  3. Kolay Kullanım: Godot Engine, kullanıcı dostu bir arayüze ve sezgisel bir düzenleyiciye sahiptir. Bu, yeni başlayanlar için öğrenmesi kolaydır.
  4. Çoklu Dil Desteği: Godot, birçok farklı programlama dilini destekler. Özellikle GDScript adlı dil, Python benzeri bir yapıya sahiptir ve Godot’a özeldir. Bunun dışında C#, C++, VisualScript, ve Rust gibi dillere de destek vardır.
  5. Oyun Motoru Özellikleri: Godot, 2D ve 3D oyun geliştirme için kapsamlı özelliklere sahiptir. Fizik simülasyonları, animasyonlar, ses desteği, veritabanı bağlantıları ve çok daha fazlasını içerir.
  6. Topluluk ve Destek: Godot, büyük ve aktif bir topluluğa sahiptir. Kullanıcılar arası yardımlaşma ve çevrimiçi kaynaklara kolay erişim sunar.
  7. Dökümantasyon: Godot, kapsamlı ve kullanıcı dostu bir dökümantasyona sahiptir. Bu, geliştirme sürecinizi kolaylaştırabilir.
  8. İleri Seviye Kontrol: İleri düzey oyun geliştiricileri için Godot, gelişmiş özelleştirme seçenekleri sunar ve karmaşık oyun mekaniği oluşturmanıza olanak tanır.
  9. Oyun Dağıtımı: Godot, oyunlarınızın dağıtımını ve pazarlama işlemlerini kolaylaştıran araçlar sunar.

Ancak, Godot’u tercih etmek için dikkate almanız gereken birkaç faktör vardır. Özellikle belirli bir platform için özel bir oyun geliştiriyorsanız, diğer oyun motorları belki daha fazla kaynak ve desteğe sahip olabilirler. Ayrıca, Godot’un bazı alanlarda diğer oyun motorlarına kıyasla daha az geniş bir eklenti ve üçüncü taraf entegrasyonları yelpazesi olabilir.

Sonuç olarak, Godot Engine, özellikle açık kaynaklı ve ücretsiz bir oyun motoru arayanlar için cazip bir seçenek olabilir. Ancak, her proje ve gereksinim farklıdır, bu yüzden seçim yapmadan önce ihtiyaçlarınızı ve hedeflerinizi dikkatlice değerlendirmeniz önemlidir.

Godot Engine – RigidBody vs KinematicBody

Godot oyun motorunda, RigidBody ve KinematicBody iki farklı fizik özelliği sunar ve bunlar arasında önemli farklar vardır. Bu iki fizik özelliğinin temel farkları şu şekildedir:

  1. RigidBody:
  • RigidBody, gerçek fizik simülasyonu kullanır ve nesneler arasındaki çarpışmaları hesaplar.
  • RigidBody nesneleri, kütle, hız, ivme ve çarpışma tepkisi gibi fiziksel özelliklere sahip olabilir.
  • Diğer RigidBody nesneleri, StaticBody nesneleri veya KinematicBody nesneleri gibi diğer fiziksel nesnelerle çarpışabilir ve bu çarpışmalar fiziksel olarak hesaplanır.
  • RigidBody nesneleri, yerçekimi tarafından etkilenir ve kütleleri nedeniyle diğer fizik nesneleri itebilir veya çekebilir.
  1. KinematicBody:
  • KinematicBody, gerçek zamanlı fizik simülasyonu yerine kod tarafından yönetilen fizik simülasyonunu kullanır.
  • KinematicBody nesneleri, fiziksel özelliklerini kodunuzu kullanarak kontrol edebilirsiniz. Örneğin, hızlarını veya pozisyonlarını doğrudan ayarlayabilirsiniz.
  • KinematicBody nesneleri, çarpışma algılama ve tepki için kod tarafından yönetilen mantık kullanır. Bu nedenle, çarpışma tepkilerini özelleştirmek daha esnek olabilir.
  • KinematicBody nesneleri, yerçekimi tarafından etkilenmezler ve yerçekimi etkisi altında serbestçe düşmezler. Bu nedenle, yerçekimi ile ilgili özel bir işlem yapmanız gerekir.

Hangi fizik özelliğinin kullanılması gerektiği, oyunun gereksinimlerine bağlıdır. Eğer gerçekçi bir fizik simülasyonu gerekiyorsa ve nesnelerin kendi aralarında ve diğer fizik nesneleriyle etkileşime girmesi gerekiyorsa RigidBody daha uygun olabilir. Ancak daha fazla kontrol ve özelleştirme gerekiyorsa veya daha karmaşık fizik kuralları uygulanması gerekiyorsa KinematicBody tercih edilebilir. Ayrıca, bazen her iki türü de aynı oyun içinde kullanmak da mümkün olabilir.

Linux İşletim Sisteminde Virüsler

Linux, diğer işletim sistemlerine göre daha güvenli olarak kabul edilir ancak kesinlikle virüslere karşı bağışık değildir. Linux işletim sistemi, birçok güvenlik önlemi ve izolasyon özelliği içerir. Bu nedenle Windows gibi diğer işletim sistemlerine göre daha az virüs ve kötü amaçlı yazılım bulaşma olasılığı vardır. Ancak bu, Linux’ün virüslere karşı tamamen bağışık olduğu anlamına gelmez.

Linux sistemi üzerinde kötü amaçlı yazılımların yayılma olasılığı daha düşüktür çünkü çoğu virüs ve kötü amaçlı yazılım, yaygın olarak kullanılan işletim sistemleri üzerinde odaklanır. Ancak Linux sistemi de güvende olmayı garantilemez. Bilgisayar korsanları veya kötü niyetli yazılım geliştiricileri, Linux sistemlerine yönelik saldırılar düzenleyebilirler.

Linux kullanıcıları, sistemlerini güncel tutmalı, güçlü şifreler kullanmalı, güvenilir kaynaklardan yazılım indirmeli ve ihtiyaca göre bir güvenlik yazılımı kullanmalıdır. Ayrıca, kullanıcıların sistemi ve uygulamaları iyi yönetmeleri ve gereksiz yetkilendirmelerden kaçınmaları da önemlidir.

Sonuç olarak, Linux, daha güvenli bir işletim sistemidir, ancak virüslere karşı tamamen bağışık değildir. Bu nedenle, güvenlik önlemlerine dikkat etmek ve güncel kalmak her zaman önemlidir.

Linux’ta Karşılaşılan Bazı Virüs ve Kötü Amaçlı Yazılım Türleri

Linux işletim sistemi, diğer işletim sistemlerine göre daha az virüs ve kötü amaçlı yazılım içerir, ancak hala bu tür tehditlere karşı savunmasız olabilir. İşte Linux’ta karşılaşılan bazı virüs ve kötü amaçlı yazılım türlerine örnekler:

  1. Linux.Wifatch (aka Linux/Moose): Bu kötü amaçlı yazılım, IoT (Nesnelerin İnterneti) cihazlarını hedefleyen bir solucan olarak bilinir. Bu solucan, zayıf parolaları kullanan cihazlara sızarak kötü amaçlı aktiviteler gerçekleştirir.
  2. Tuxen (Linux üzerindeki ilk virüs): Tuxen, 1996’da keşfedilen eski bir Linux virüsüdür. Ancak modern Linux dağıtımları için genellikle bir tehdit oluşturmaz.
  3. Linux.RST.B (Rescue CD virüsü): Bu kötü amaçlı yazılım, özellikle Linux kurtarma CD’leri ve USB sürücülerine bulaşan bir virüs türüdür. Kurtarma işlemleri sırasında sistemlere zarar verebilir.
  4. SSH Brute-Force Saldırıları: Virüs olmasa da, kötü niyetli kullanıcılar, SSH (Secure Shell) üzerinden sisteme girmeye çalışırken genellikle şifre denemeleri yaparlar. İyi bir şifre politikası ve güvenlik önlemleri, bu tür saldırılara karşı koruma sağlar.
  5. Rootkitler: Rootkitler, Linux sistemlerinde kök yetkilere sahip olmayı hedefleyen kötü amaçlı yazılımlardır. Bu tür kötü amaçlı yazılımlar, sistemi ele geçirerek gizli kalır ve yetkisiz erişim sağlar.

Ancak, belirtmek önemlidir ki, Linux topluluğu hızlı bir şekilde güvenlik açıklarını kapatır ve güvenlik yamalarını yayınlar. Bu nedenle güncel ve güvende kalmak için sisteminizi ve yazılımlarınızı düzenli olarak güncellemeniz önemlidir. Ayrıca, güvenlik yazılımı ve güvenlik duvarları da kullanarak Linux sisteminizi koruyabilirsiniz.

Linux Ortamında Oluşabilecek Güvenlik Açıkları ve Antivirüs Kullanımı

Linux için birçok antivirüs programı mevcuttur ve bunları kullanmak birçok durumda önerilir. İşte nedenleri:

  1. Linux Sistemler de Tehlikelere Açıktır: Linux işletim sistemi, diğer işletim sistemlerine göre daha az virüs ve kötü amaçlı yazılım içerir, ancak bu, tamamen güvende olduğu anlamına gelmez. Bilgisayar korsanları veya kötü niyetli yazılım geliştiricileri, Linux sistemlerine yönelik saldırılar düzenleyebilir. Bu nedenle, Linux sistemlerinin güvenliğini artırmak için antivirüs yazılımı kullanmak önemlidir.
  2. E-posta ve Dosya Paylaşımı Güvenliği: E-posta ve dosya paylaşımı gibi günlük işlemler, kötü amaçlı yazılım bulaşma riskini artırabilir. Antivirüs yazılımı, bu tür risklere karşı koruma sağlar ve kötü amaçlı dosyaları tespit edebilir.
  3. Linux Sunucuları için Güvenlik: Linux sunucuları, web sunucuları, veritabanları ve diğer önemli işlemler için kullanılır. Bu sunucuların güvende olması kritik öneme sahiptir. Antivirüs yazılımı, sunucuları kötü amaçlı yazılımlara karşı korumak için kullanılabilir.
  4. Windows ve Diğer İşletim Sistemleri ile Etkileşim: Linux sistemleri, Windows ve diğer işletim sistemleriyle etkileşimde bulunabilir. Kötü amaçlı yazılımlar Linux sistemlerine bulaştığında, bunları diğer işletim sistemlerine bulaştırmamak için antivirüs yazılımı kullanmak önemlidir.
  5. Kötü Amaçlı Yazılım Tarama ve Temizleme: Antivirüs yazılımları, mevcut kötü amaçlı yazılımları taramak ve temizlemek için kullanılabilir. Bu, potansiyel tehditleri belirlemenize ve ortadan kaldırmanıza yardımcı olur.

Linux için popüler antivirüs programları arasında ClamAV, Sophos Antivirus for Linux, ESET NOD32 Antivirus, ve AVG yer almaktadır. Hangi antivirüs yazılımını kullanmanız gerektiği, ihtiyaçlarınıza ve sisteminizin kullanımına bağlı olarak değişebilir.

Sonuç olarak, Linux kullanıcıları, güvenliklerini artırmak ve potansiyel tehditlere karşı korunmak için antivirüs yazılımı kullanmayı düşünmelidirler. Ancak, antivirüs yazılımı yalnızca bir güvenlik katmanıdır ve diğer güvenlik önlemleriyle birlikte kullanılmalıdır.

Godot Engine – GDScript: _on_body_entered

_on_body_entered Godot oyun motorunun bir olay işleyici fonksiyonudur. Bu fonksiyon, bir fizik cisminin başka bir fizik cisminin sınırlarına girdiği anı işlemek için kullanılır. Bu genellikle çarpışma algılama ve tepkileri uygulamak için kullanılır.

Örneğin, bir karakterin düşmanla çarpıştığı anı yakalamak ve buna tepki vermek için _on_body_entered fonksiyonunu kullanabilirsiniz.

İşte bu fonksiyonun kullanımı hakkında temel bir örnek:

extends Area2D

# Bu işlev, bu nesnenin sınırlarına başka bir fizik cisminin girdiği anı işler.
func _on_body_entered(body):
    if body.is_in_group("enemies"):
        # Eğer çarpışan cisim düşman grubuna aitse
        queue_free()  # Kendi nesneyi yok et

Bu örnek, bir Area2D nesnesinin sınırlarına başka bir fizik cisminin girdiği anı kontrol eder. Eğer çarpışan cisim “enemies” adlı bir gruba aitse, bu nesne kendisini yok eder.

Bunun yanı sıra, _on_body_entered fonksiyonunu, çeşitli olayları yakalamak ve nesneler arasında etkileşimleri uygulamak için kullanabilirsiniz. Bu fonksiyonun tam olarak nasıl kullanılacağı, projenizin gereksinimlerine bağlı olarak değişebilir.

Flutter – Image Kullanımı

Flutter’da bir resim görüntülemek için “Image” widget’ını kullanabilirsiniz. Aşağıdaki adımları izleyerek bir resmi Flutter projesinde görüntüleyebilirsiniz:

  • İlk önce, resim dosyasını projenize ekleyin. Bunun için, projenizin “assets” dizini içinde bir “images” dizini oluşturun ve resim dosyasını buraya ekleyin. Örneğin, resim dosyanız “my_image.jpg” ise, projenizin “assets/images/my_image.jpg” olarak kaydedilmesi gerekiyor.
  • Resmi kullanmak için, projenizdeki “pubspec.yaml” dosyasını açın ve resim dosyanızın yolunu “assets” alanına ekleyin. Örneğin:
flutter:

  assets:
    - assets/images/my_image.jpg
  • Resmi görüntülemek için, “Image” widget’ını kullanın ve “asset” parametresine resim dosyasının yolunu verin. Örneğin:
Image.asset('assets/images/my_image.jpg')

Tam bir örnek:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My Image App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('My Image'),
        ),
        body: Center(
          child: Image.asset('assets/images/my_image.jpg'),
        ),
      ),
    );
  }
}

Bu örnek, bir “My Image” başlığı olan bir AppBar ve bir resim gösteren bir merkezi gövde içeren basit bir uygulama oluşturur.

Flutter – Navigation (veri gönderimi)

Flutter’da veri gönderimi, bir ekran veya sayfadan diğerine veri aktarmak için Navigator sınıfının kullanılmasıyla gerçekleştirilir. İşte Flutter’da veri gönderimi için genel bir yol:

  • İlk olarak, veri alıcı sayfanın yapısını oluşturun. Bu sayfada veriyi görüntüleyeceğiniz widget’ları yerleştirin.
  • Veri gönderen sayfada, kullanıcı etkileşimi veya diğer bir olay tetiklendiğinde veriyi alıcı sayfaya aktarın. Bunun için Navigator sınıfının push veya pushNamed yöntemlerini kullanabilirsiniz. Bu yöntemler, bir sonraki sayfaya geçmek için kullanılır ve birinci parametre olarak geçiş yapılacak sayfanın referansını alırken ikinci parametre olarak göndermek istediğiniz veriyi alır.

Örneğin, veriyi alıcı sayfaya aktarırken push yöntemini kullanabilirsiniz:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => AliciSayfa(veri: gonderilecekVeri),
  ),
);

Burada AliciSayfa veri alıcı sayfayı temsil ederken, veri parametresiyle veriyi aktarıyoruz.

Veri alıcı sayfada, AliciSayfa widget’ının yapısını tanımlayın ve veriyi almak için veri parametresini kullanın. Bu parametre, widget’ın yapıcı yöntemine veya başka bir yerde belirtilmiş olmalıdır.

class AliciSayfa extends StatelessWidget {
  final String veri;

  AliciSayfa({required this.veri});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Alici Sayfa'),
      ),
      body: Center(
        child: Text(veri),
      ),
    );
  }
}

Burada veri parametresi AliciSayfa sınıfının bir özelliği olarak tanımlanır ve build yönteminde kullanılır.

Bu şekilde, bir sayfadan diğerine veri gönderebilir ve alabilirsiniz. Veriyi daha karmaşık veri türlerine veya nesnelere göndermek isterseniz, parametreleri buna göre ayarlamalısınız. Ayrıca, bu örnekte MaterialPageRoute ve push kullanıldı, ancak projenizin navigasyon yöntemlerine göre değişebilir.

Flutter – Navigation

Flutter, geliştiricilere birden çok sayfa veya ekranın kullanıcı arayüzünde gezinmesine olanak tanıyan bir navigasyon stack (yığın) sistemine sahiptir. Bu stack, bir sayfadan diğerine geçiş yapılmasını ve geri dönüşlerde önceki sayfaya geri dönülmesini sağlar.

En yaygın kullanılanlar:

  • Navigator.push(): Bu yöntem, mevcut sayfadan yeni bir sayfaya geçiş yapmak için kullanılır. Örneğin, bir düğmeye tıklandığında yeni bir sayfanın açılmasını istediğinizde kullanabilirsiniz.
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => YeniSayfa()),
);
  • Navigator.pop(): Bu yöntem, mevcut sayfayı kapatıp önceki sayfaya geri dönmek için kullanılır. Örneğin, bir “Geri” düğmesine tıklandığında veya işlem tamamlandığında kullanabilirsiniz.
Navigator.pop(context);
  • Navigator.pushReplacement(): Bu yöntem, mevcut sayfayı başka bir sayfa ile değiştirmek için kullanılır. Yeni sayfa açıldığında, önceki sayfa tamamen kapanır ve yerine yeni sayfa gelir.
Navigator.pushReplacement(
  context,
  MaterialPageRoute(builder: (context) => YeniSayfa()),
);
  • Navigator.pushNamed(): Bu yöntem, adlandırılmış rotaları kullanarak sayfalar arasında geçiş yapmak için kullanılır. Önceden tanımlanan rotalara isim verilir ve bu isimler kullanılarak sayfalar açılır.
Navigator.pushNamed(context, '/yeniSayfa');
  • Navigator.pushNamedAndRemoveUntil(): Bu yöntem, belirli bir rotaya kadar olan tüm sayfaları kapatıp yeni bir sayfayı açmak için kullanılır. Yani, belirli bir sayfaya geçmek istediğinizde, tüm önceki sayfaları kapatıp yeni sayfayı açabilirsiniz.
Navigator.pushNamedAndRemoveUntil(
  context,
  '/yeniSayfa',
  ModalRoute.withName('/anaSayfa'),
);

Flutter – initState

initState fonksiyonu, Flutter’da bir Widget’in durumunu başlatmak için kullanılan özel bir metoddur. initState metodu, bir Widget oluşturulduğunda yalnızca bir kez çağrılır ve Widget’in durumunu başlatmak veya Widget ile ilişkili diğer nesneleri hazırlamak için kullanılır.

initState metodu genellikle Widget’in yapıcı fonksiyonunda yer alır ve Widget’in durumunu başlatmak için kullanılan ilk adımları içerir. Bu yöntemde, Widget’e özgü durum değişkenleri oluşturulabilir, veri kaynaklarına veya hizmetlere erişim sağlanabilir veya bazı başlangıç ​​işlemleri gerçekleştirilebilir.

Örneğin, bir StatefulWidget oluşturduğunuzda, durum değişkenlerinizi initState metodunda başlatabilir ve bunları başlangıç değerleriyle doldurabilirsiniz. Ayrıca, veritabanı bağlantısı veya ağ istekleri gibi asenkron işlemleri başlatmak veya başka Widget’larla etkileşimde bulunmak için de kullanabilirsiniz.

İşte basit bir örnek:

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  String message;

  @override
  void initState() {
    super.initState();
    message = 'Hello, World!';
    fetchDataFromServer();
  }

  void fetchDataFromServer() {
    // Asenkron olarak veri almak için bir işlem yapabilirsiniz
    // Örneğin, bir API'ye istek yapabilirsiniz
  }

  @override
  Widget build(BuildContext context) {
    return Text(message);
  }
}

Yukarıdaki örnekte, initState metodunda message adında bir durum değişkeni oluşturulur ve başlangıç değeri “Hello, World!” olarak ayarlanır. Ayrıca, fetchDataFromServer adında başka bir metot da initState içinde çağrılır. Bu metot, asenkron bir işlemi simüle eder ve örneğin bir API’ye istek yapabilir. Ardından, build metodu, durum değişkeni olan message‘ı kullanarak bir Text Widget’ını döndürür.

Bu örnekte, initState metodunun Widget’in durumunu başlatmak ve önceden tanımlanan başlangıç değerleriyle doldurmak için kullanıldığını görebilirsiniz.