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
Statenesnesinden oluşur; burada durumu ve UI inşa mantığı (build) saklanır.
- StatelessWidget: İçsel değişken durumu olmayan widget. UI, sadece giriş parametrelerine bağlıdır (
Render Süreci:
- Build: Framework, widget'ın
build()metodunu çağırır; bu, başka widget'ların ağacını döner. - Element Ağacı: Widget ağacına dayanarak, UI yapısını temsil eden
Element Treeoluşturulur. Element'ler, widget'ları uygun render nesneleriyle bağlar. - Render Object Ağacı: Element'ler,
Render Object Treeadlı render nesnesi ağacını oluşturur ve yönetir. Render nesneleri, düzen, boyama ve hit testi sorumludur. - 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
initStateveya 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
}