Bosh sahifa Wiki Flutter

Flutter

Flutter — bitta codebase orqali Android, iOS, web, desktop va boshqa platformalar uchun foydalanuvchi interfeysli application yaratishga mo‘ljallangan ochiq kodli UI toolkit. Flutter applicationlari asosan Dart tilida yoziladi. Framework o‘z widget tizimi, rendering qatlami va development vositalarini taqdim etadi.

Flutter platformaning native UI componentlarini har doim to‘g‘ridan-to‘g‘ri ishlatmaydi; ko‘p interfeysni o‘z rendering engine’i orqali chizadi.

Dart

Flutter uchun asosiy dasturlash tili Dart.

Dart:

imkoniyatlarini beradi.

Developmentda JIT, release buildda AOT compilation ishlatilishi mumkin.

Widget

Flutter interfeysining asosiy birligi widget.

Text, padding, layout, theme va butun screen ham widget sifatida ifodalanadi.

Widget immutable configuration.

Framework undan element va render objectlar hierarchy’sini boshqarish uchun foydalanadi.

StatelessWidget

Ichki mutable state talab qilmaydigan component.

Input constructor orqali keladi.

build method joriy propertylar asosida widget tree qaytaradi.

Parent yangi property bersa component qayta build qilinadi.

StatefulWidget

O‘zgaradigan local state kerak bo‘lsa StatefulWidget ishlatiladi.

Widgetning o‘zi immutable, mutable qiymatlar alohida State objectida saqlanadi.

setState state o‘zgarganini frameworkga bildiradi.

Uzun business state alohida architecture qatlamida boshqariladi.

Build method

build tez, deterministic va side-effectlarsiz bo‘lishi kerak.

U network request boshlamasligi yoki databasega yozmasligi kerak.

Framework uni ko‘p marta chaqirishi mumkin.

Og‘ir hisob cache yoki background isolate’ga ko‘chiriladi.

Widget tree

UI nested widgetlardan tashkil topadi:

MaterialApp
→ Scaffold
→ Column
→ Text
→ Button

Composition inheritance’dan ko‘ra keng ishlatiladi.

Juda chuqur tree avtomatik yomon emas, ammo component nomlash va ajratish readability uchun muhim.

Element tree

Element widget instance bilan render object orasidagi persistent bog‘lanishni saqlaydi.

Widget yangilanganda framework type va key bo‘yicha mavjud elementni qayta ishlatishi mumkin.

State qaysi componentga tegishli ekanini element identity belgilaydi.

Key

List reorder yoki bir xil turdagi siblinglarda identity’ni saqlash uchun key ishlatiladi.

Turlari:

  • ValueKey;
  • ObjectKey;
  • UniqueKey;
  • GlobalKey.

GlobalKey kuchli, ammo qimmat va ortiqcha ishlatilmasligi kerak.

Layout

Flutter constraint-based layout ishlatadi:

Constraints go down
Sizes go up
Parents set positions

Parent childga minimum va maximum o‘lcham beradi.

Child shu oraliqda o‘lcham tanlaydi.

Unbounded constraint ko‘p layout xatolarining sababidir.

Row va Column

Row elementlarni gorizontal, Column vertikal joylashtiradi.

MainAxis va CrossAxis alignment boshqariladi.

Bo‘sh joy uchun Expanded, Flexible va Spacer ishlatiladi.

Scroll container ichida Expanded noto‘g‘ri constraint olishi mumkin.

Rendering

Widget tree configuration, render object esa layout, paint va hit testingni bajaradi.

Flutter engine grafik API orqali frame chizadi.

Platformaga qarab rendering backend farq qilishi mumkin.

60 yoki undan yuqori frame rate uchun frame budget saqlanadi.

Hot reload

Developmentda source o‘zgarishi running applicationga tez qo‘llanadi.

Ko‘p state saqlanadi.

Class structure yoki native qismdagi ayrim o‘zgarish hot restart talab qiladi.

Hot reload release behaviorni to‘liq almashtirmaydi.

Package

Dart va Flutter package’lari pubspec.yaml orqali boshqariladi.

Dependency version constraint bilan belgilanadi.

pubspec.lock applicationda resolved versionlarni saqlaydi.

Package native plugin bo‘lishi mumkin.

Plugin

Platforma-specific API uchun plugin ishlatiladi:

  • camera;
  • location;
  • notification;
  • storage;
  • biometric.

Dart API platform channel orqali Android yoki iOS implementationiga ulanadi.

Har platformada permission va lifecycle farqi boshqariladi.

Platform channel

Dart va native kod message almashadi.

Method channel request-response, event channel stream uchun ishlatilishi mumkin.

Katta binary data serialization overhead yaratadi.

Platform threadini uzoq operation bilan bloklash mumkin emas.

Navigator route stackni boshqaradi.

Imperative va declarative routing usullari mavjud.

Deep link, browser history va nested navigation uchun router package ishlatilishi mumkin.

Route’dan katta object emas, stable ID uzatish qulay.

State management

Variantlar:

  • setState;
  • InheritedWidget;
  • Provider;
  • Riverpod;
  • BLoC;
  • Reduxga oid yondashuvlar.

Framework bitta majburiy architecture bermaydi.

Tanlov loyiha hajmi va team tajribasiga mos bo‘ladi.

Async va isolate

Dart event loop asynchronous I/O uchun ishlaydi.

CPUga og‘ir ish UI isolate’ni bloklaydi.

Alohida isolate memory’ni shared qilmaydi, message bilan aloqa qiladi.

Image parsing va katta JSON background isolate’da bajarilishi mumkin.

Test

Flutter:

imkoniyatlarini beradi.

Widget test real qurilmasiz UI behaviorini tekshiradi.

Golden test rendered outputni reference image bilan solishtirishi mumkin.

Platform integration real device’da tekshiriladi.

Release

Android uchun APK yoki AAB, iOS uchun signed archive yaratiladi.

Har platforma signing, permission va store talabiga ega.

Bitta codebase deployment jarayonlarini butunlay bir xil qilmaydi.

Native configuration baribir zarur.

InheritedWidget

Widget tree bo‘ylab theme yoki shared dependency uzatish uchun InheritedWidget asosiy mexanizmlardan biridir. BuildContext eng yaqin provider’ni topadi va dependency o‘zgarsa kuzatuvchi widget qayta build bo‘ladi. Provider kabi kutubxonalar shu g‘oyani qulaylashtiradi.

Rendering performance

Har frame layout, paint va raster bosqichlaridan o‘tadi. Og‘ir shader, katta image yoki main isolate’dagi JSON parsing jank yaratadi. DevTools timeline frame budgetdan oshgan bosqichni ko‘rsatadi.

Platform view

Native map yoki web view Flutter hierarchy ichiga joylashtirilishi mumkin. Platform view compositing, gesture va accessibility bo‘yicha qo‘shimcha xarajatga ega.

Bog‘liq tushunchalar

Flutter, Dart, Widget, StatelessWidget, StatefulWidget, Widget tree, Hot reload, Platform channel, State management, Cross-platform development, Rendering engine