Sobes.tech
Middle+

Ko jūs zināt par Flutter iekšējo struktūru?

sobes.tech AI

Atbilde no AI

„Flutter“ kodols sastāv no motora, karkasa un vadības elementiem.

  • „Flutter“ motors: Rakstīts C++ un nodrošina zema līmeņa API zīmēšanai, teksta apstrādei, straumēm un spraudņiem. Tas tieši sadarbojas ar platformu (iOS, Android, Web, Desktop) un grafikas API (piemēram, Skia). Motors pārvalda zīmēšanu, asinhronos darbus un lietotnes dzīves ciklu.

  • „Flutter“ karkass (Framework): Rakstīts Dart un nodrošina abstrakcijas slāni virs motora. Tajā ir daudzi gatavi komponenti:

    • Foundation: Pamatklases un palīgfunkcijas.
    • Rendering: Slānis, kas pārvalda zīmējumu koku un to zīmēšanu.
    • Widgets: Galvenie UI būvniecības blokki, kas veido widget koku.
    • Material Design un Cupertino: Widget komplekti, kas īsteno Material Design stilus un iOS dizainu.
  • Vadības elementi: „Flutter“ viss ir vadības elements. Vadības elementi apraksta UI konfigurāciju. Ir divi galvenie tipi:

    • StatelessWidget: Vadības elements bez iekšējas mainīgas stāvokļa. Tā UI ir atkarīgs tikai no ieejas parametriem (properties).
    • StatefulWidget: Vadības elements, kam var būt maināms stāvoklis. Tas sastāv no pašas vadības elementa un State objekta, kurā glabājas stāvoklis un UI būvniecības loģika (build metode).

Zīmēšanas process:

  1. Build: Rāmis izsauc vadības elementa build() metodi, kas atgriež citu vadības elementu koku.
  2. Element Tree: Pamatojoties uz vadības elementu koku, tiek izveidots elementu koks (Element Tree), kas pārstāv UI struktūru. Elementi sasaista vadības elementus ar atbilstošajiem zīmēšanas objektiem.
  3. Render Object Tree: Elementi izveido un pārvalda zīmēšanas objektu koku (Render Object Tree). Zīmēšanas objekti ir atbildīgi par izkārtojumu, krāsošanu un hit testing.
  4. Gleznošana: Motors izmanto Skia (mobilajās un darbvirsmas platformās) vai CanvasKit (interneta vidē), lai zīmētu Render Objects ekrānā.

Reaktīva programmēšana:

„Flutter“ izmanto reaktīvu pieeju UI būvniecībai. Kad mainās lietotnes stāvoklis, rāmis atjauno to daļu no vadības elementu koka, kas ir atkarīga no šī stāvokļa. Tas notiek automātiski un efektīvi, izmantojot diffing mehānismu un ātru vadības elementu izveidi un iznīcināšanu.

Karstā ielāde (Hot Reload) un karstā restartēšana (Hot Restart):

  • Hot Reload: ievieto atjaunināto Dart kodu jau darbojošajā lietotnē bez stāvokļa zaudēšanas. Ideāli UI ātrai iterācijai.
  • Hot Restart: pārstartē lietotni ar jaunu kodu un atiestatītu stāvokli. To izmanto, kad Hot Reload nedarbojas, piemēram, izmaiņām initState vai globālajos mainīgajos.

Platformas specifiskais kods:

„Flutter“ ļauj sadarboties ar nativajiem API platformā, izmantojot platformu kanālus (Platform Channels). Tas ļauj izsaukt nativā koda metodes (Java/Kotlin Android, Swift/Objective-C iOS) un saņemt rezultātus atpakaļ Dart.

// Piemērs platformu kanāla izmantošanai
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 = 'Akumulatora līmenis: $result %.';
  } on PlatformException catch (e) {
    batteryLevel = "Neizdevās iegūt akumulatora līmeni: '${e.message}'.";
  }
  // UI atjaunināšana
}