Čo viete o vnútornej štruktúre Flutteru?
sobes.tech AI
Odpoveď od AI
Jadro Flutteru sa skladá z motora, rámca a widgetov.
-
Motor Flutter: Napísaný v C++ a poskytuje nízkoúrovňové API pre vykresľovanie, prácu s textom, tokmi a doplnkami. Priamo komunikuje s platformou (iOS, Android, Web, Desktop) a grafickými API (napríklad Skia). Motor riadi vykresľovanie, asynchrónne operácie a životný cyklus aplikácie.
-
Rámec Flutter (Framework): Napísaný v Dart a poskytuje vrstvu abstrakcie nad motorom. Obsahuje množstvo hotových komponentov:
- Foundation: Základné triedy a pomocné funkcie.
- Rendering: Vrstva pre správu stromu renderovacích objektov a ich kreslenie.
- Widgets: Hlavné stavebné bloky UI, ktoré tvoria strom widgetov.
- Material Design a Cupertino: Sady widgetov implementujúcich štýly Material Design a dizajn v štýle iOS.
-
Widgety: V Flutter je všetko widget. Opisujú konfiguráciu UI. Existujú dva hlavné typy:
- StatelessWidget: Widget bez vnútorného meniteľného stavu. Jeho UI závisí iba od jeho vstupných parametrov (
properties). - StatefulWidget: Widget, ktorý môže mať meniteľný stav. Skladá sa z widgetu a objektu
State, v ktorom sa uchováva stav a logika pre tvorbu UI (buildmetóda).
- StatelessWidget: Widget bez vnútorného meniteľného stavu. Jeho UI závisí iba od jeho vstupných parametrov (
Proces renderovania:
- Build: Framework volá metódu
build()widgetu, ktorá vracia strom iných widgetov. - Element Tree: Na základe stromu widgetov sa vytvorí strom elementov (
Element Tree), ktorý predstavuje štruktúru UI. Elementy spájajú widgety s príslušnými objektmi renderovania. - Render Object Tree: Elementy vytvárajú a spravujú strom renderovacích objektov (
Render Object Tree). Objekt renderovania je zodpovedný za rozloženie, farbenie a hit testing. - Painting: Motor používa Skia (na mobiloch a desktopoch) alebo CanvasKit (na webe) na kreslenie Render Objectov na obrazovku.
Reaktívne programovanie:
Flutter používa reaktívny prístup k tvorbe UI. Pri zmene stavu aplikácie framework prebuduje tú časť stromu widgetov, ktorá závisí od tohto stavu. To sa deje automaticky a efektívne vďaka mechanizmu diffing a rýchlemu vytváraniu a ničenie widgetov.
Hot Reload a Hot Restart:
- Hot Reload: Vkladá aktualizovaný Dart kód do bežiacej aplikácie bez straty stavu. Ideálne pre rýchlu iteráciu UI.
- Hot Restart: Reštartuje aplikáciu od začiatku s aktualizovaným kódom a resetovaným stavom. Používa sa, keď Hot Reload nefunguje, napríklad pri zmenách v
initStatealebo globálnych premenných.
Kód špecifický pre platformu:
Flutter umožňuje komunikáciu s natívnymi API platformy cez platformové kanály (Platform Channels). To umožňuje volať metódy natívneho kódu (Java/Kotlin na Android, Swift/Objective-C na iOS) a získavať výsledky späť do Dart.
// Príklad použitia platformového kanála
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 = 'Úroveň batérie: $result %.';
} on PlatformException catch (e) {
batteryLevel = "Nepodarilo sa získať úroveň nabíjania: '${e.message}'.";
}
// Aktualizácia UI
}