Flutter-in daxili quruluşu haqqında nə bilirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Flutter nüvəsi motor, karkas və vidjetlərdən ibarətdir.
-
Flutter Motoru: C++ dilində yazılıb və aşağı səviyyəli API təqdim edir, render, mətnlə işləmə, axınlar və plaginlər üçün. O, platforma ilə (iOS, Android, Web, Desktop) və qrafik API-ləri ilə (məsələn, Skia) birbaşa əlaqə saxlayır. Motor qrafiklərin çəkilməsi, asinxron əməliyyatlar və tətbiqin həyat dövrünü idarə edir.
-
Flutter Karkası (Framework): Dart dilində yazılıb və motor üzərində abstraksiya qatını təmin edir. O, çox sayda hazır komponentləri əhatə edir:
- Foundation: Əsas siniflər və köməkçi funksiyalar.
- Rendering: Render ağacını və onların çəkilməsini idarə edən qat.
- Widgets: UI-nin əsas tikinti blokları, vidjet ağacını təşkil edir.
- Material Design və Cupertino: Material Design və iOS stilində dizayn və vidjetlər toplusu.
-
Vidjetlər: Flutter-də hər şey vidjetdir. Vidjetlər UI konfiqurasiyasını təsvir edir. İki əsas növü var:
- StatelessWidget: Daxili dəyişkən vəziyyəti olmayan vidjet. Onun UI-si yalnız giriş parametrlərindən asılıdır (
properties). - StatefulWidget: Dəyişkən vəziyyətə malik ola bilən vidjet. O, özündə vidjet və
Stateobyektini birləşdirir, burada vəziyyət və UI-nin qurulması (buildmetodu) saxlanılır.
- StatelessWidget: Daxili dəyişkən vəziyyəti olmayan vidjet. Onun UI-si yalnız giriş parametrlərindən asılıdır (
Render Prosesi:
- Build: Framework
build()metodunu çağırır, hansı ki, digər vidjetlərin ağacını qaytarır. - Element Tree: Vidjet ağacına əsaslanaraq elementlər ağacı (
Element Tree) yaradılır, bu da UI strukturunu təmsil edir. Elementlər vidjetləri uyğun render obyektləri ilə əlaqələndirir. - Render Object Tree: Elementlər render obyektləri ağacını (
Render Object Tree) yaradır və idarə edir. Render obyektləri ölçü, boyama və hit testing üçün cavabdehdir. - Painting: Motor Skia (mobil və masaüstü üçün) və ya CanvasKit (veb üçün) istifadə edərək Render obyektlərini ekranda çəkir.
Reaktiv Proqramlaşdırma:
Flutter UI qurmaq üçün reaktiv yanaşma istifadə edir. Vəziyyət dəyişdikdə, framework bu vəziyyətə bağlı vidjetlər ağacının həmin hissəsini yenidən qurur. Bu, diffing mexizmi və vidjetlərin sürətli yaradılması və məhv edilməsi sayəsində avtomatik və səmərəlidir.
İstilik Yenidən Yükləmə (Hot Reload) və İstilik Yenidən Başlatma (Hot Restart):
- Hot Reload: Dart kodunu işləyən tətbiqə daxil edir, vəziyyəti itirmədən. UI-də sürətli iterasiya üçün idealdır.
- Hot Restart: Tətbiqi sıfırdan yenidən başlatır, yenilənmiş kod və sıfırlanmış vəziyyətlə. Hot Reload işləmədikdə istifadə olunur, məsələn,
initStatevə ya qlobal dəyişənlərdə dəyişikliklər zamanı.
Platforma-özəl kod:
Flutter platforma kanalları (Platform Channels) vasitəsilə nativ API-lərlə əlaqə qurmağa imkan verir. Bu, Java/Kotlin (Android) və Swift/Objective-C (iOS) kimi nativ kod metodlarını çağırmağa və nəticələri Dart-a almağa imkan verir.
// Platform Channel nümunəsi
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 = 'Batareya səviyyəsi: $result %.';
} on PlatformException catch (e) {
batteryLevel = "Səviyyə alınmadı: '${e.message}'.";
}
// UI-ni yeniləyin
}