Чӣ медонед дар бораи сохтори дохилии Flutter?
sobes.tech AI
Ҷавоб аз AI
Ядрои Flutter аз муҳаррик, рамка ва виджетҳо иборат аст.
-
Муҳаррики Flutter: Дар C++ навишта шудааст ва API-и пасти сатҳро барои рендеринг, кор бо матн, ҷараёнҳо ва плагинҳо пешниҳод мекунад. Он мустақиман бо платформа (iOS, Android, Web, Desktop) ва API-ҳои графикӣ (масалан Skia) муошират мекунад. Муҳаррик идоракунии рендеринг, амалҳои асинхронӣ ва давраи ҳаёти барнома мебошад.
-
Рамки Flutter (Framework): Дар Dart навишта шудааст ва қабати абстраксияро болои муҳаррик пешниҳод мекунад. Он бисёр компонентҳои тайёрро дар бар мегирад:
- Foundation: Классҳои асосӣ ва функсияҳои ёрирасон.
- Rendering: Қабат барои идоракунии дарахти объектҳои рендеринг ва расмкашӣ.
- Widgets: Блокҳои асосии UI, ки дарахти виджетҳоро ташкил медиҳанд.
- Material Design ва Cupertino: Сетҳои виджетҳо, ки услуби Material Design ва тарҳи iOS-ро иҷро мекунанд.
-
Виджетҳо: Дар Flutter ҳама чиз виджет аст. Онҳо конфигуратсияи UI-ро тавсиф мекунанд. Ду навъи асосӣ доранд:
- StatelessWidget: Виджети бе ҳолати дохилӣ. UI танҳо аз параметрҳои воридотӣ (
properties) вобаста аст. - StatefulWidget: Виджети бо ҳолати тағйирёбанда. Он аз виджет ва объекти
Stateиборат аст, ки дар он ҳолат ва логикаи сохтани UI (buildметод) нигоҳ дошта мешавад.
- StatelessWidget: Виджети бе ҳолати дохилӣ. UI танҳо аз параметрҳои воридотӣ (
Раванди рендеринг:
- Build: Фреймворд методи
build()виджетиро даъват мекунад, ки дарахти дигар виджетҳоро бармегардонад. - Element Tree: Дар асоси дарахти виджетҳо дарахти элементҳо (
Element Tree) сохта мешавад, ки структураи UI-ро намояндагӣ мекунад. Элементҳо виджетҳоро бо объектҳои рендеринг пайваст мекунанд. - Render Object Tree: Элементҳо дарахти объектҳои рендеринг (
Render Object Tree) месозанд ва идора мекунанд. Объектҳои рендеринг масъул барои андоза, ранг ва тестинг мебошанд. - Painting: Мотор Skia (дар мобилӣ ва десктоп) ё CanvasKit (дар веб) барои расмкашӣ кардани Render Objects ба экран истифода мешавад.
Реактиви програминавӣ:
Flutter ба сохтани UI равишти реактивро истифода мебарад. Вақте ки ҳолати барнома тағйир меёбад, фреймворк он қисми дарахти виджетҳоро, ки ба он ҳолат вобаста аст, дубора месозад. Ин автоматӣ ва самаранок бо механизм diffing ва эҷод ва нобуд кардани виджетҳо зуд анҷом дода мешавад.
Hot Reload ва Hot Restart:
- Hot Reload: Кодро Dart-навиштаи навсозишударо ба барнома ворид мекунад, бе аз даст додани ҳолат. Ин барои такрори зуд UI беҳтарин аст.
- Hot Restart: Барномаро аз нав оғоз мекунад бо код навсозишуда ва ҳолати нол. Ин вақте истифода мешавад, ки Hot Reload кор намекунад, масалан, дар тағйирот дар
initStateё тағйирёбандаҳои глобалӣ.
Коди махсус барои платформа:
Flutter имкон медиҳад, ки бо API-и нативии платформа тавассути каналҳои платформа (Platform Channels) муошират кунад. Ин имкон медиҳад, ки методҳои коди нативӣ (Java/Kotlin дар Android, Swift/Objective-C дар iOS) даъват карда шаванд ва натиҷаҳо ба Dart баргардонида шаванд.
// Намунаи истифодаи каналҳои платформа
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 = 'Дараҷаи батарея: $result %.';
} on PlatformException catch (e) {
batteryLevel = "Намудани имконият барои гирифтани дараҷаи батарея: '${e.message}'.";
}
// Навсозии UI
}