Sobes.tech
Middle+

Flutter'ın iç yapısı hakkında ne biliyorsun?

sobes.tech yapay zeka

AI'dan gelen yanıt

Flutter'ın çekirdeği motor, çerçeve ve widget'lardan oluşur.

  • Flutter Motoru: C++ ile yazılmıştır ve düşük seviyeli API sağlar; render, metin işlemi, iş parçacıkları ve eklentiler için. Doğrudan platformla (iOS, Android, Web, Masaüstü) ve grafik API'leriyle (örneğin, Skia) etkileşir. Motor, çizim, asenkron işlemler ve uygulama yaşam döngüsünü yönetir.

  • Flutter Çerçevesi (Framework): Dart'ta yazılmıştır ve motor üzerinde soyutlama katmanı sağlar. Birçok hazır bileşen içerir:

    • Foundation: Temel sınıflar ve yardımcı fonksiyonlar.
    • Rendering: Çizim ağacını ve nesneleri yönetmek için katman.
    • Widgets: UI'nin temel yapı taşları, widget ağacını oluşturur.
    • Material Design ve Cupertino: Material Design ve iOS tarzı tasarımları uygulayan widget setleri.
  • Widgets: Flutter'da her şey widget'tır. Widget'lar UI yapılandırmasını tanımlar. İki ana türü vardır:

    • StatelessWidget: İçsel değişken durumu olmayan widget. UI, sadece giriş parametrelerine bağlıdır (properties).
    • StatefulWidget: Değişken duruma sahip olabilen widget. Kendisi ve State nesnesinden oluşur; burada durumu ve UI inşa mantığı (build) saklanır.

Render Süreci:

  1. Build: Framework, widget'ın build() metodunu çağırır; bu, başka widget'ların ağacını döner.
  2. Element Ağacı: Widget ağacına dayanarak, UI yapısını temsil eden Element Tree oluşturulur. Element'ler, widget'ları uygun render nesneleriyle bağlar.
  3. Render Object Ağacı: Element'ler, Render Object Tree adlı render nesnesi ağacını oluşturur ve yönetir. Render nesneleri, düzen, boyama ve hit testi sorumludur.
  4. Boyama: Motor, ekran üzerinde render nesnelerini çizmek için Skia (mobil ve masaüstü) veya CanvasKit (web) kullanır.

Reaktif Programlama:

Flutter, UI inşa etmek için reaktif bir yaklaşım kullanır. Durum değiştiğinde, framework, bu duruma bağlı widget ağacını yeniden inşa eder. Bu, diffing mekanizması ve widget'ların hızlı oluşturulması ve yok edilmesi sayesinde otomatik ve etkilidir.

Sıcak Yenileme (Hot Reload) ve Sıcak Yeniden Başlatma (Hot Restart):

  • Hot Reload: Güncellenmiş Dart kodunu, durumu kaybetmeden çalışan uygulamaya enjekte eder. Hızlı UI iterasyonu için idealdir.
  • Hot Restart: Uygulamayı sıfırdan yeniden başlatır; güncellenmiş kod ve sıfırlanmış durumla. Hot Reload çalışmadığında kullanılır, örneğin initState veya küresel değişkenlerde değişiklik yapıldığında.

Platforma Özel Kod:

Flutter, platform kanalları (Platform Channels) aracılığıyla yerel API'lerle etkileşime geçmesine izin verir. Bu, Java/Kotlin (Android), Swift/Objective-C (iOS) gibi yerel kod metodlarını çağırmayı ve sonuçları Dart'a geri almayı sağlar.

// Platform Kanalı kullanımı örneği
import 'package:flutter/services.dart';

static const platform = MethodChannel('samples.flutter.dev/battery');

Future<void> getBatteryLevel() async {
  String batteryLevel;
  try {
    final int result = await platform.invokeMethod('getBatteryLevel');
    batteryLevel = 'Pil seviyesi: $result %.';
  } on PlatformException catch (e) {
    batteryLevel = "Pil seviyesi alınamadı: '${e.message}'.";
  }
  // UI'yı güncelle
}