Sobes.tech
Middle+

Co víte o vnitřní struktuře Flutteru?

sobes.tech AI

Odpověď od AI

Jádro Flutteru se skládá z jádra, rámce a widgetů.

  • Motor Flutter: Napsaný v C++ a poskytuje nízkoúrovňové API pro vykreslování, práci s textem, vlákny a pluginy. Přímo komunikuje s platformou (iOS, Android, Web, Desktop) a grafickými API (například Skia). Motor řídí vykreslování, asynchronní operace a životní cyklus aplikace.

  • Rámec Flutter (Framework): Napsaný v Dart a poskytuje vrstvu abstrakce nad motorem. Obsahuje mnoho hotových komponent:

    • Foundation: Základní třídy a pomocné funkce.
    • Rendering: Vrstva pro správu stromu renderovacích objektů a jejich vykreslování.
    • Widgets: Hlavní stavební bloky UI, které tvoří strom widgetů.
    • Material Design a Cupertino: Sady widgetů implementujících styly Material Design a iOS design.
  • Widgety: Ve Flutteru je vše widget. Popisují konfiguraci UI. Existují dva hlavní typy:

    • StatelessWidget: Widget bez vnitřního měnitelného stavu. Jeho UI závisí pouze na jeho vstupních parametrech (properties).
    • StatefulWidget: Widget, který může mít měnitelný stav. Skládá se z widgetu a objektu State, ve kterém je uložen stav a logika tvorby UI (build metoda).

Proces vykreslování:

  1. Build: Framework volá metodu build() widgetu, která vrací strom dalších widgetů.
  2. Element Tree: Na základě stromu widgetů je vytvořen strom elementů (Element Tree), který představuje strukturu UI. Elementy spojují widgety s odpovídajícími objekty renderování.
  3. Render Object Tree: Elementy vytvářejí a spravují strom renderovacích objektů (Render Object Tree). Objekt renderování je odpovědný za rozložení, barvení a hit testing.
  4. Painting: Motor používá Skia (na mobilu a desktopu) nebo CanvasKit (na webu) k vykreslení Render Objectů na obrazovku.

Reaktivní programování:

Flutter používá reaktivní přístup k tvorbě UI. Při změně stavu aplikace framework přestavuje tu část stromu widgetů, která na tento stav závisí. To se děje automaticky a efektivně díky mechanismu diffing a rychlému vytváření a ničení widgetů.

Horké načítání (Hot Reload) a Horké restartování (Hot Restart):

  • Hot Reload: Vkládá aktualizovaný Dart kód do běžící aplikace bez ztráty stavu. Ideální pro rychlou iteraci UI.
  • Hot Restart: Restartuje aplikaci od začátku s aktualizovaným kódem a resetovaným stavem. Používá se, když Hot Reload nefunguje, například při změnách v initState nebo globálních proměnných.

Kód specifický pro platformu:

Flutter umožňuje komunikaci s nativními API platformy přes platformní kanály (Platform Channels). To umožňuje volání metod nativního kódu (Java/Kotlin na Androidu, Swift/Objective-C na iOS) a získávání výsledků zpět do Dart.

// Příklad použití platformního kanálu
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ň baterie: $result %.';
  } on PlatformException catch (e) {
    batteryLevel = "Nepodařilo se získat úroveň nabití: '${e.message}'.";
  }
  // Aktualizace UI
}