Flutterning ichki tuzilishi haqida nima bilasiz?
sobes.tech AI
AIdan javob
Flutter-ın əsas hissəsi motor, çərçivə və widgetlərdən ibarətdir.
-
Flutter Motoru: C++ dilində yazılıb və aşağı səviyyəli API təmin edir; render, mətnin işlənməsi, ipliklər və plaginlər üçün. Birbaşa platforma ilə (iOS, Android, Web, Masaüstü) və qrafik API-ləri ilə (məsələn, Skia) əlaqə qurur. Motor renderləşdirmə, asinxron əməliyyatlar və tətbiqin həyat dövrünü idarə edir.
-
Flutter Çərçivəsi: Dart dilində yazılıb və motor üzərində abstraksiya qatını təmin edir. Bir çox hazır komponentləri əhatə edir:
- Foundation: Əsas siniflər və köməkçi funksiyalar.
- Rendering: Render obyektlərinin ağacını və onların çəkilməsini idarə edən qat.
- Widgets: UI-nin əsas tikinti blokları, widget ağacını təşkil edir.
- Material Design və Cupertino: Material Design və iOS stilində dizaynları həyata keçirən widget toplusu.
-
Widgets: Flutter-də hər şey widget-dır. Widgetlar UI konfiqurasiyasını təsvir edir. İki əsas növü var:
- StatelessWidget: Daxili dəyişkən vəziyyəti olmayan widget. UI yalnız giriş parametrlərinə (
properties) bağlıdır. - StatefulWidget: Dəyişkən vəziyyətə malik ola bilən widget. Öz widget-ı və
Stateobyektindən ibarətdir; burada vəziyyət və UI qurma məntiqi (build) saxlanılır.
- StatelessWidget: Daxili dəyişkən vəziyyəti olmayan widget. UI yalnız giriş parametrlərinə (
Render prosesi:
- Build: Framework, widget-ın
build()metodunu çağırır; bu, digər widget-ların ağacını qaytarır. - Element Tree: Widget ağacına əsaslanaraq, UI strukturunu təmsil edən
Element Treeyaradılır. Elementlər widget-ları uyğun render obyektləri ilə bağlayır. - Render Object Tree: Elementlər, render obyektlərinin ağacını (
Render Object Tree) yaradır və idarə edir. Render obyektləri layout, boyama və hit testing üçün məsuliyyət daşıyır. - Painting: Motor, ekranda render obyektlərini çəkmək üçün Skia (mobil və masaüstü) və ya CanvasKit (web) istifadə edir.
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ı widget ağacını yenidən qurur. Bu, diffing mexanizmi və widgetların sürətli yaradılması və məhv edilməsi sayəsində avtomatik və səmərəlidir.
Hot Reload və Hot Restart:
- Hot Reload: Güncellenmiş Dart kodunu işləyən tətbiqə daxil edir, vəziyyəti itirmədən. Sürətli UI iterasiyaları üçü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şiklik edildikdə.
Platformaya xas kod:
Flutter, platforma kanalları (Platform Channels) vasitəsilə yerli API-lərlə əlaqə qurmağa imkan verir. Bu, Java/Kotlin (Android), Swift/Objective-C (iOS) kimi yerli kod metodlarını çağırmağa və nəticələri Dart-ə geri almağa imkan verir.
// Platform Kanalından istifadə 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 = "Batareya səviyyəsini almaq mümkün olmadı: '${e.message}'.";
}
// UI-ni yenilə
}