10 β Flutter bilan tanishuv¶
β¬ οΈ Oldingi: 09 β Asinxron Dart Β· π README Β· Keyingi: 11 β Hamma narsa widget β‘οΈ
Bu bobda: mana, nihoyat β Dart tilini o'rgandingiz, endi Flutterga qadam qo'yamiz. Bu kitobning birinchi Flutter bobi. Siz Flutter ichkarida qanday ishlashini (widget daraxti, Impeller dvigateli, GPU) tushunasiz; eng muhim aqliy o'zgarishni β deklarativ UI (
UI = f(holat)) β o'zlashtirasiz; "hamma narsa widget" g'oyasini ko'rasiz; standart ilovaningmain.dartfaylini satrma-satr o'qiymiz (runApp,MaterialApp,Scaffold,AppBar,Center,Text);buildmetodi vaBuildContextnima ekanini,constkonstruktorlar nega muhimligini, hot reload va hot restart farqini bilib olasiz. Oxirida birgalikda chiroyli, mavzulangan (themed) birinchi ilovani quramiz.
Dart'dan Flutter'ga: nima o'zgaradi?¶
Oldingi to'qqiz bobda siz Dart tilini o'rgandingiz: o'zgaruvchilar, funksiyalar, klasslar, null safety, Future/Stream. Bularning hammasi konsolda ishladi β print(...) orqali ekranga matn chiqardingiz, xolos.
Endi esa biz ko'rinadigan, barmoq bilan teginiladigan interfeyslar quramiz: tugmalar, ro'yxatlar, animatsiyalar. Lekin xotirjam bo'ling β siz yangi til o'rganmaysiz. Flutter ham o'sha Dart'da yoziladi. O'zgaradigan narsa β fikrlash usuli. Mana shu bob aynan shu o'zgarishga bag'ishlangan.
Avval bitta savolga javob beramiz: nega Flutter umuman boshqa freymvorklardan farq qiladi?
Flutter ichkarida qanday ishlaydi?¶
Tasavvur qiling, siz rassomga "bu yerga ko'k kvadrat, uning ostiga 'Salom' yozuvi chiz" deb tasvirlaysiz. Rassom esa qo'liga cho'tka olib, har bir nuqtani o'zi bo'yaydi. Flutter aynan shunday ishlaydi.
Jarayon to'rt bosqichdan iborat:
- Siz widgetlar bilan UI'ni tasvirlaysiz. "Yuqorida panel, markazda matn bo'lsin" deysiz β Dart kodida.
- Flutter freymvorki bu tasvirdan daraxt quradi. Widgetlar bir-birining ichiga joylashgan ulkan oila daraxti β buni keyinroq batafsil ko'ramiz.
- Impeller dvigateli (2026-yilda Flutter'ning standart renderer'i) bu daraxtni chizish buyruqlariga aylantiradi.
- GPU (grafik protsessor) shu buyruqlar asosida ekranga piksellarni chizadi.
Eng muhim tushuncha shu: Flutter har bir pikselni o'zi chizadi. U telefonning tayyor (OEM) tugmalarini yoki matn maydonlarini olib ishlatmaydi β hamma narsani noldan o'zi rasm qiladi. Natijada ilovangiz Android'da ham, iOS'da ham bir xil ko'rinadi va bir xil his beradi, chunki ikkala holatda ham xuddi shu Flutter chizadi.
π‘ Ko'prik (bridge) yo'q. Ba'zi boshqa freymvorklar (masalan ko'pgina "JavaScript" yondashuvlar) ekrandagi narsalarni boshqarish uchun JS bilan native platforma orasida har safar xabar uzatadigan ko'prik ishlatadi β bu sekinlik manbai bo'lishi mumkin. Flutter'da bunday ko'prik yo'q: Dart kodingiz to'g'ridan-to'g'ri native mashina kodiga kompilyatsiya qilinadi va Impeller bevosita GPU bilan ishlaydi. Shuning uchun Flutter "native tezlik" deyiladi.
Bu detallarni hozir yodlash shart emas. Bitta narsani eslab qoling: siz UI'ni tasvirlaysiz, Flutter uni o'zi chizadi.
Deklarativ UI β eng muhim aqliy o'zgarish¶
Bu bobning eng muhim g'oyasi shu. Agar boshqa hamma narsani unutsangiz ham, buni eslab qoling.
Eski (imperativ) usulda dasturchi ekranni qo'lda, qadam-baqadam o'zgartirardi. Masalan, hisoblagich (counter) ilovasini tasavvur qiling. Tugma bosilganda eski usulda shunday yozardingiz:
// Imperativ (eski) β "qanday qilib" o'zgartirishni aytasiz
hisob = hisob + 1;
yorliq.text = hisob.toString(); // ekrandagi matnni qo'lda yangilash
if (hisob > 0) tozalashTugmasi.korsat();
Muammo shundaki, har bir o'zgarishni o'zingiz boshqarasiz. Qaysidir joyda yorliq.textni yangilashni unutsangiz β ekran eskirgan qiymatni ko'rsatib turaveradi. Ilova kattalashgan sari bunday "qo'lda yangilash" qadamlari ko'payib, xato kirib kelishi osonlashadi.
Flutter esa deklarativ. Siz "qanday o'zgartirish kerak"ni emas, balki "shu holatda ekran qanday ko'rinishi kerak"ni tasvirlaysiz. Buni mashhur formula bilan ifodalaydilar:
UI = f(holat) β interfeys, holatning (state) funksiyasidir.
Ya'ni: sizda biror holat bor (masalan counter = 3). Siz bitta funksiya yozasiz β u shu holatni oladi va shu holat uchun UI qanday ko'rinishini qaytaradi. Holat o'zgarganda (counter = 4 bo'lganda), Flutter o'sha funksiyani qaytadan chaqiradi va yangi UI'ni quradi. Siz ekranni qo'lda yangilamaysiz β faqat holatni o'zgartirasiz, qolganini Flutter qiladi.
// Deklarativ (Flutter) β "nima ko'rinishi kerak"ni tasvirlaysiz
Text('$counter') // counter qancha bo'lsa, shuni ko'rsat
// counter o'zgarsa β Flutter bu satrni qaytadan baholaydi
Bu Excel'ga o'xshaydi: =A1+A2 formulasini bir marta yozasiz. A1 o'zgarsa, natija avtomatik yangilanadi β siz har safar qaytadan hisoblamaysiz. Flutter'da build funksiyasi xuddi shunday formula.
Holatni qanday saqlash va o'zgartirishni biz 16-bobda (StatefulWidget va setState) chuqur o'rganamiz. Hozircha asosiy g'oyani β holat o'zgaradi, UI qaytadan quriladi β tushunsangiz kifoya.
Hamma narsa β widget¶
Flutter falsafasining yuragi bitta jumla: "hamma narsa β widget".
Widget β bu ekranning bir bo'lagini tasvirlaydigan kichik, qayta ishlatiladigan element. Lekin "widget" so'zini keng tushuning. Flutter'da:
- Matn β
Textwidget. - Rasm β
Imagewidget. - Tugma β
ElevatedButtonwidget. - Markazga joylash β
Centerwidget. - Hatto bo'sh joy (padding), tekislash (alignment), ustun/qator ham β hammasi widget.
Ya'ni ko'rinish ham, joylashuv (layout) ham, uslub (style) ham β barchasi widget. Bu Lego'ga juda o'xshaydi: sizda turli shakldagi kichik bo'laklar bor va siz ularni bir-birining ichiga joylashtirib murakkab narsa quryapsiz.
Widgetlar bir-birining ichiga joylashganda widget daraxti (widget tree) hosil bo'ladi. Bitta ildiz widget bor, uning ichida bolalar (children), ularning ichida yana bolalar... β xuddi oila daraxti kabi. Flutter mana shu daraxtni o'qib ekranni chizadi.
π‘ Analogiya: HTML bilgan bo'lsangiz β u yerda
<div>ichida<p>, uning ichida<span>bo'lardi. Widget daraxti ham shunday joylashgan tuzilma, lekin teglar o'rniga Dart obyektlari (widgetlar) bor.
Birinchi ilovaning anatomiyasi¶
Endi nazariyadan amaliyotga o'tamiz. Yangi Flutter loyihasi yaratganingizda (flutter create salom_app), Flutter sizga tayyor namuna beradi. Biz uni tozalab, o'zimizning sodda ilovamizni yozamiz va har bir satrini tushuntiramiz.
Mana to'liq lib/main.dart fayli:
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Salom Flutter',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
),
home: Scaffold(
appBar: AppBar(
title: const Text('Birinchi ilovam'),
),
body: const Center(
child: Text('Salom, Flutter!'),
),
),
);
}
}
Bu kod ishlaganda telefon ekranida yuqorida ko'k panel ("Birinchi ilovam" yozuvi bilan) va markazda "Salom, Flutter!" matni ko'rinadi. Endi bu fayl bir-bir nima qilishini ko'rib chiqamiz.
import β Material kutubxonasi¶
Bu satr Material Design widgetlarini (Google'ning dizayn tizimi) ilovangizga olib keladi: MaterialApp, Scaffold, AppBar, Text, Colors β bularning hammasi shu kutubxonadan. Deyarli har bir Flutter faylida birinchi satr aynan shu bo'ladi.
main() va runApp()¶
main() β Dart dasturining kirish nuqtasi ekanini 01-bobdan bilasiz. Flutter'da main ichida bitta vazifa bor: runApp(...) ni chaqirish. runApp o'ziga berilgan widgetni ildiz qilib oladi va uni butun ekranga joylashtiradi. Bu yerda biz MyApp degan o'z widgetimizni beryapmiz.
E'tibor bering β bu => (arrow) sintaksisi, ya'ni main() shunchaki runApp(const MyApp()) ni qaytaradi. const haqida pastda gaplashamiz.
MyApp β birinchi widgetingiz¶
Mana, birinchi o'z widgetingiz. U StatelessWidget'dan meros oladi (extends) β bu "holatsiz", ya'ni vaqt o'tishi bilan o'zgarmaydigan widget degani. (Holatli StatefulWidgetni keyinroq ko'ramiz.)
const MyApp({super.key});β bu konstruktor.super.keyβ har bir widgetga beriladigan ixtiyoriy "kalit"; Flutter undan widgetlarni daraxtda bir-biridan ajratishda foydalanadi. Hozircha shunchaki "har bir widget konstruktoridasuper.keybo'ladi" deb qabul qiling β sabablariga keyinroq qaytamiz.
build metodi β UI'ni qaytaradigan funksiya¶
Bu β har bir widgetning eng muhim metodi. Esingizdami, deklarativ UI'da "holatni oladigan va UI qaytaradigan funksiya" haqida gapirdik? Mana build aynan o'sha funksiya. U bitta widget (aslida butun bir daraxt) qaytaradi β ana shu daraxt ekranga chiziladi.
Muhim qoidalar:
buildni siz chaqirmaysiz β uni Flutter kerak bo'lganda (masalan holat o'zgarganda) o'zi chaqiradi.buildtez va "toza" bo'lishi kerak: u faqat widget daraxtini qurishi lozim, og'ir hisob-kitob yoki fayl o'qish kabi ishlarni emas. Chunki u juda ko'p marta qayta chaqirilishi mumkin.
BuildContext context β bu argument widgetning daraxtdagi o'rni (manzili) haqida ma'lumot beradi: "men daraxtning qayerida turibman, ustimda qaysi widgetlar bor". Hozircha undan foydalanmaymiz, lekin u keyingi boblarda mavzu (theme), navigatsiya kabi narsalarga "yuqoriga qarab" murojaat qilishda kerak bo'ladi.
MaterialApp β ilovaning qobig'i¶
return MaterialApp(
title: 'Salom Flutter',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
),
home: Scaffold( ... ),
);
MaterialApp β bu butun ilovani o'rab turuvchi eng tashqi widget. U juda ko'p narsani sozlaydi:
- mavzu (theme) β ranglar, shriftlar, umumiy ko'rinish;
- navigatsiya (routing) β ekranlar orasida o'tish (19-20 boblar);
- ilovaning umumiy nomi va sozlamalari.
home: β ilova ochilganda ko'rinadigan birinchi ekran. Bu yerda u Scaffold.
Mavzu (theming): ColorScheme.fromSeed(seedColor: Colors.indigo) β bitta "urug'" (seed) rangdan butun bir uyg'un rang palitrasini avtomatik yaratadi. Ya'ni siz faqat asosiy rangni (indigo β to'q ko'k) aytasiz, Flutter undan tugmalar, panellar, fon uchun mos ranglarni o'zi hisoblab chiqaradi.
π‘ Bu Material 3 dizayn tizimi β 2026-yilda Flutter'da standart (default). Eski darslardagi
useMaterial3: truebayrog'ini yozish shart emas β u allaqachon yoqilgan. Mavzu, dark mode va tipografiyani kitobning keyingi qismida, Material 3 bobida chuqur ko'ramiz.
Scaffold β sahifaning skeleti¶
Scaffold β bitta ekranning skeleti (asosiy karkasi). U Material dizayndagi sahifaning standart joylashuvini beradi va eng ko'p ishlatiladigan "uyalar" (slotlar)ga ega:
appBar:β yuqoridagi panel (sarlavha, tugmalar);body:β sahifaning asosiy, katta o'rta qismi;floatingActionButton:β pastda-o'ngda turuvchi dumaloq tugma (masalan "+" qo'shish);- yana
drawer,bottomNavigationBarva boshqalar.
Siz faqat kerakli uyalarni to'ldirasiz, qolganini bo'sh qoldirasiz.
AppBar, Center, Text¶
appBar: AppBar(
title: const Text('Birinchi ilovam'),
),
body: const Center(
child: Text('Salom, Flutter!'),
),
AppBarβ ekran yuqorisidagi panel. Uningtitle:uyasigaTextjoylaymiz.Centerβ o'ziningchild:(bola) widgetini ota-ona maydonining markaziga joylaydigan layout widget. Bu yerda u "Salom, Flutter!" matnini ekran o'rtasiga olib chiqadi.Textβ eng oddiy widget: ekranga matn chiqaradi.
E'tibor bering: Center faqat bitta child: oladi, Scaffold esa bir nechta nomli uya (appBar, body...) oladi. Qaysi widget nechta bola olishi β keyingi boblar mavzusi.
Hammasini birlashtirsak β widget daraxti¶
Yuqoridagi kod aslida ana shunday joylashgan widget daraxtini quradi:
Ildizda MaterialApp, uning ichida Scaffold, undan ikki shox tarqaladi: AppBar (ichida Text) va body β Center β Text. Mana shu daraxtni Flutter o'qiydi va ekranga chizadi. Siz qachonki widgetlarni bir-birining ichiga yozsangiz, aslida shu daraxtni qo'lda quryapsiz.
const konstruktorlar β nega muhim?¶
Yuqorida bir necha joyda const so'zini ko'rdingiz: const MyApp(), const Center(...), const Text('...'). Nega?
const Text('Salom, Flutter!') β bu Flutter'ga: "bu widget hech qachon o'zgarmaydi, uning qiymatlari kompilyatsiya vaqtida ma'lum" deb aytadi. Natijada Flutter build har safar qayta chaqirilganda bu widgetni qaytadan yaratmaydi β bir marta yaratilgan nusxasini qayta ishlatadi.
Esingizda bo'lsin, build juda ko'p marta chaqiriladi (har holat o'zgarganda). Agar har safar barcha widgetlarni noldan yaratish kerak bo'lsa, bu bekorga ish bo'lardi. const aynan shu bekor ishni oldini oladi β bu unumdorlik (performance) uchun muhim.
π‘ Qoida: agar widget o'zgaruvchiga bog'liq bo'lmasa (qat'iy qiymatga ega bo'lsa), uni
constqiling. Masalanconst Text('Salom')βconstbo'ladi, lekinText('$ism')(o'zgaruvchiga bog'liq) βconstbo'lolmaydi. VS Code odatda buni o'zi taklif qiladi (lint).
Hot reload va hot restart β dasturchining super-kuchi¶
Flutter'ni shunchalik yoqimli qiladigan narsalardan biri β siz kodni o'zgartirishingiz bilan natijani bir soniyada ko'rasiz. Buni flutter run ishlab turganda terminaldan boshqarasiz:
| Buyruq | Nomi | Nima qiladi |
|---|---|---|
r |
Hot reload | O'zgargan kodni darhol (bir soniyadan kam) ilovaga yuklaydi va UI'ni yangilaydi. Holat saqlanib qoladi β masalan hisoblagich qiymati yo'qolmaydi. |
R |
Hot restart | Ilovani noldan qayta ishga tushiradi. Tezroq (to'liq qayta o'rnatishdan), lekin holat nolga qaytadi. |
Ish jarayoni (dev loop) odatda shunday: ilovani flutter run bilan ishga tushirasiz β kodni o'zgartirasiz β saqlaysiz (yoki r bosasiz) β ekranda natijani ko'rasiz β yana o'zgartirasiz... Bu sikl shunchalik tez-ki, dizayn bilan jonli tajriba qilib o'rganasiz.
π‘ Qachon
r, qachonR? Ko'pinchar(hot reload) yetarli: rang, matn, joylashuvni o'zgartirsangiz. Lekinmain()o'zgarsa yoki ilovani "boshidan" sinab ko'rmoqchi bo'lsangiz βR(hot restart) ishlating. Ba'zan hot reload o'zgarishni ko'rsatmasa, hot restart bilan urinib ko'ring.
Birgalikda: chiroyliroq birinchi ilova¶
Endi o'rgangan hamma narsani birlashtirib, ozgina bezatilgan ilova quramiz: panel, markazda ikon va salomlashuv matni. Buni lib/main.dartga yozing:
import 'package:flutter/material.dart';
void main() => runApp(const SalomApp());
class SalomApp extends StatelessWidget {
const SalomApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Salom Flutter',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
),
home: Scaffold(
appBar: AppBar(
title: const Text('Mening birinchi ilovam'),
),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.flutter_dash, size: 96),
SizedBox(height: 16),
Text(
'Salom, Flutter dunyosi!',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
SizedBox(height: 8),
Text('Bu mening 0 dan qurgan birinchi ilovam.'),
],
),
),
),
);
}
}
Bu yerda yangi tanish-bilishlar:
Columnβ bolalarini ustun qilib (yuqoridan pastga) joylaydi.children:β bir nechta bola ro'yxati.Icon(Icons.flutter_dash, size: 96)β tayyor ikonkalardan biri (Dash β Flutter maskoti).Icons.ichida minglab ikonka bor.SizedBox(height: 16)β shunchaki bo'sh joy (oraliq) qo'yadigan widget. Esingizdami β bo'sh joy ham widget.style: TextStyle(...)β matn ko'rinishini (o'lcham, qalinlik) sozlaydi.
Column, Row va layout'ni keyingi boblarda batafsil ko'ramiz β hozir shunchaki his qilib ko'ring. Ilovani ishga tushiring (flutter run), keyin matnni o'zgartiring va r bosing β natija darhol o'zgarganini ko'rasiz. Ikonni boshqasiga (Icons.favorite, Icons.star) almashtiring, seedColorni Colors.teal yoki Colors.deepOrangega o'zgartiring β butun ilova rangi qanday o'zgarishini kuzating. Mana shu β Flutter bilan o'rganishning eng yaxshi usuli: tajriba qiling.
Keyingi qadam¶
Tabriklaymiz β siz birinchi Flutter ilovangizni qurdingiz va eng muhim g'oyani tushundingiz: siz UI'ni deklarativ tarzda tasvirlaysiz, Flutter esa uni widget daraxti orqali chizadi.
Keyingi 11-bobda "hamma narsa widget" g'oyasini chuqurlashtiramiz: StatelessWidgetni batafsil ko'rib, Text, Icon, Image, Container kabi asosiy ko'rinish widgetlari bilan tanishamiz. Holat (state) bilan ishlash β setState va o'zgaradigan UI β esa 16-bobda keladi.
Mashqlar¶
Oson¶
- O'z so'zlaringiz bilan "Flutter har bir pikselni o'zi chizadi" iborasi nimani anglatishini tushuntiring. Bu nega ilovani Android va iOS'da bir xil ko'rsatadi?
UI = f(holat)formulasini izohlang: bu yerdafnima, "holat" nima va natijada nima hosil bo'ladi?- Quyidagi widgetlarning har biri nima qilishini bir jumlada yozing:
MaterialApp,Scaffold,AppBar,Center,Text. - Hot reload (
r) va hot restart (R) farqi nimada? Qaysi biri holatni saqlaydi? - Nima uchun
const Text('Salom')deb yozish yaxshi, lekinconst Text('$ism')deb yozib bo'lmaydi?
O'rta¶
- Standart ilovaning widget daraxtini (
MaterialAppβScaffoldβAppBar+TextvabodyβCenterβText) o'zingiz chizib chiqing yoki ro'yxat ko'rinishida yozing. buildmetodi haqida uchta haqiqatni yozing: kim uni chaqiradi, u nima qaytaradi va nega u "tez" bo'lishi kerak.- To'liq, kompilyatsiya bo'ladigan
main.dartyozing: uAppBar'da "Profil" sarlavhasini,body'da markazda "Tez orada..." matnini ko'rsatsin.seedColorsifatidaColors.greenishlating.
Qiyin¶
- Imperativ va deklarativ yondashuvni hisoblagich (counter) misolida solishtiring: imperativda tugma bosilganda nimalar qilinishi kerakligini va deklarativda buning o'rniga nima qilinishini tushuntiring (kod bo'lmasa ham bo'ladi, asosiy g'oyani aytib bering).
- Bir o'quvchi: "
buildichida har safar yangiTextobyekti yaratilsa, bu sekin emasmi?" deb so'rayapti.constkonstruktorlar bu muammoni qanday hal qilishini tushuntiring.
Yechimlar
1. Flutter telefonning tayyor (OEM) tugma/matn elementlarini ishlatmaydi β o'rniga butun interfeysni Impeller dvigateli orqali GPU'da o'zi chizadi. Demak, tugmaning ko'rinishini platforma emas, Flutter belgilaydi. Shuning uchun bir xil kod Android'da ham, iOS'da ham aynan bir xil piksellarni chizadi β ko'rinish va xatti-harakat bir xil bo'ladi.
2. f β bu build funksiyasi (metodi). "Holat" β UI'ning hozirgi vaziyati (masalan counter = 3, kiritilgan matn, yuklanish holati). Natijada f shu holat uchun mos widget daraxti (UI) hosil qiladi. Holat o'zgarsa, f qaytadan chaqilib, yangi UI quriladi.
3.
- MaterialApp β butun ilovani o'rab, mavzu/navigatsiya/sozlamalarni boshqaradigan eng tashqi widget.
- Scaffold β bitta ekranning skeleti (appBar, body, floatingActionButton kabi uyalar bilan).
- AppBar β ekran yuqorisidagi panel (sarlavha, tugmalar).
- Center β bolasini ota maydonining markaziga joylaydi.
- Text β ekranga matn chiqaradi.
4. Hot reload (r) β o'zgargan kodni darhol yuklaydi va UI'ni yangilaydi, holatni saqlab qoladi. Hot restart (R) β ilovani noldan ishga tushiradi va holatni nolga qaytaradi. Holatni hot reload saqlaydi.
5. const widget kompilyatsiya vaqtida to'liq ma'lum bo'lgan, o'zgarmaydigan qiymatlardan tuzilgan bo'lishi kerak. 'Salom' β qat'iy matn, shuning uchun const bo'ladi. '$ism' esa ism o'zgaruvchisiga bog'liq β uning qiymati ishlash vaqtida (runtime) aniqlanadi, kompilyatsiya vaqtida emas, shuning uchun const bo'lolmaydi.
6.
MaterialApp
βββ Scaffold
βββ appBar: AppBar
β βββ title: Text('Birinchi ilovam')
βββ body: Center
βββ child: Text('Salom, Flutter!')
7.
- Kim chaqiradi: Flutter freymvorki (siz emas) β kerak bo'lganda, masalan holat o'zgarganda.
- Nima qaytaradi: widget (aslida butun widget daraxti).
- Nega tez: u ko'p marta qayta chaqirilishi mumkin; agar build ichida og'ir ish (fayl o'qish, og'ir hisob) bo'lsa, ilova sekinlashadi. Shuning uchun build faqat daraxt qurishi kerak.
8.
import 'package:flutter/material.dart';
void main() => runApp(const ProfilApp());
class ProfilApp extends StatelessWidget {
const ProfilApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Profil',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.green),
),
home: Scaffold(
appBar: AppBar(
title: const Text('Profil'),
),
body: const Center(
child: Text('Tez orada...'),
),
),
);
}
}
9. Imperativ: tugma bosilganda siz qo'lda bir nechta qadam bajarasiz β hisobni oshirasiz (hisob++), keyin ekrandagi matn widgetini topib uning qiymatini yangilaysiz (yorliq.text = ...), ehtimol boshqa elementlarni ko'rsatasiz/yashirasiz. Har bir o'zgarishni o'zingiz boshqarasiz, biror yangilashni unutsangiz UI eskirib qoladi. Deklarativ (Flutter): siz faqat holatni o'zgartirasiz (hisob ni oshirasiz) va Flutter'ga "qaytadan qur" deb signal berasiz. build shu yangi holat uchun butun UI'ni qaytadan tasvirlaydi β Text('$hisob') avtomatik yangi qiymatni ko'rsatadi. Siz ekranni qo'lda yangilamaysiz; "qanday" emas, "nima ko'rinishi kerak"ni tasvirlaysiz.
10. Ha, agar har build chaqiruvida widgetlar haqiqatan ham noldan yaratilsa, bu bekor ish bo'lardi. const konstruktor aynan shuni hal qiladi: const Text('Salom') kompilyatsiya vaqtida bir marta yaratiladi va Flutter uni qayta ishlatadi β build har safar chaqirilganda yangi nusxa yaratmaydi. Shuning uchun o'zgarmaydigan widgetlarni const qilish ilovani tezlashtiradi va keraksiz qayta qurishni kamaytiradi.
β¬ οΈ Oldingi: 09 β Asinxron Dart Β· π README Β· Keyingi: 11 β Hamma narsa widget β‘οΈ