Scaffold — bu Flutterdagi markaziy vidjet-ramka bo‘lib, AppBar, Drawer, BottomNavigationBar va FloatingActionButton bilan Material Design ekran tuzilishini amalga oshiradi. U elementlarni joylashtiribgina qolmay, balki to‘g‘ri z-tartibi va foydalanuvchi imo-ishoralarini qayta ishlash bilan tayyor arxitektura taqdim etadi. Flutter Documentation (2026) ma’lumotlariga ko‘ra, Scaffold SnackBar va BottomSheet kabi Material komponentlarining to‘g‘ri ishlashi uchun majburiy ildiz element hisoblanadi. Container yoki Columndan farqli o‘laroq, Scaffold SafeArea, adaptiv fon va klaviatura harakatini avtomatik boshqaradi, bu uni mobil ilovalarda ekranlar qurish uchun standartga aylantiradi.
Asosiy
Scaffold — bu Material Design kutubxonasidan olingan vidjet-kompozitor bo‘lib, ekranning asosiy vizual tuzilishini shakllantiradi. U Material ilovasining standart namunasini amalga oshiradi: yuqori panel, ekran tanasi, yon menyu va suzuvchi tugmalar. Faqat o‘lchamlar va uslubni belgilaydigan Containerdan farqli o‘laroq, Scaffold butun ekranni yagona tizim sifatida boshqaradi.
Material Design bo‘yicha qurilgan har bir Flutter ilovasi MaterialApp bilan boshlanadi, uning ichida har bir ekran Scaffoldga o‘raladi. Aynan Scaffold iPhone X va undan yuqori modellar uchun SafeAreani hisobga olgan holda barcha qurilmalarda AppBarning to‘g‘ri ko‘rsatilishini ta’minlaydi. U shuningdek z-tartibi uchun javobgardir: Drawer tanadan yuqorida, SnackBar esa butun interfeysdan yuqorida, ammo muloqot oynalaridan pastda ko‘rsatiladi.
Rasmiy Flutter API Reference (2026) ma’lumotlariga ko‘ra, Scaffold SnackBar, BottomSheet va PersistentBottomSheet kabi vidjetlarning to‘g‘ri ishlashi uchun majburiy shartdir. Scaffoldsiz bu komponentlar istisno tashlaydi, chunki ular Scaffold kontekstiga kirish uchun InheritedWidget Scaffold.of ga bog‘liq. Shuning uchun har qanday tarkibni Scaffold o‘rniga to‘g‘ridan-to‘g‘ri Containerga joylashtirish Material funksionalligini yo‘qotishga olib keladigan boshlang‘ich dasturchilarning keng tarqalgan xatosidir.
Oddiy Flutter ilovasida Scaffold MaterialApp ichida, odatda cross-platform ishlanmada WidgetsApp yoki CupertinoApp ostida joylashadi. MaterialApp Navigator va mavzuni yaratadi, Scaffold esa joriy ekran tuzilishini belgilaydi. Har bir ekran o‘zining noyob AppBar, Drawer va BottomNavigationBari bilan o‘z Scaffoldiga ega bo‘lishi mumkin, bu interfeysni muayyan sahifa uchun moslashuvchan sozlash imkonini beradi.
Chuqur moslashtirish uchun Scaffold NestedScrollView bilan birlashtirilishi mumkin — bu parallaks effekti bilan yo‘qoladigan AppBar kabi murakkab aylantirish effektlarini amalga oshirish imkonini beradi. Biroq ko‘p hollarda standart Scaffold o‘z xususiyatlari bilan ishlab chiqarishga tayyor ekran qurish uchun yetarli.
Scaffold bir necha majburiy va ixtiyoriy zonalardan iborat bo‘lib, har biri interfeysning ma’lum bir qismi uchun javobgardir. Ularning bir-biri bilan qanday o‘zaro aloqada ekanligini tushunish uchun har bir qismni alohida ko‘rib chiqaylik.
AppBar — bu sarlavha, navigatsiya tugmasi va harakatlarni ko‘rsatadigan ekranning yuqori paneli. U avtomatik ravishda 56dp to‘g‘ri balandlikni oladi va ‘‘chuqurchali’‘ qurilmalar uchun SafeAreani hisobga oladi. AppBarga bottom xususiyatidan foydalanib varaqlarni almashtirish uchun TabBar o‘rnatilishi mumkin.
Drawer — bu chap tomondan chiqadigan va ilova bo‘limlari bo‘yicha navigatsiyani ta’minlaydigan panel. drawer xususiyati o‘rnatilgan bo‘lsa, Scaffold avtomatik ravishda AppBarga gamburger belgisini qo‘shadi. Drawer DrawerHeader, menyu elementlari bilan ListView va foydalanuvchi ma’lumotlarini o‘z ichiga olishi mumkin.
BottomNavigationBar — bu asosiy bo‘limlar o‘rtasida o‘tish uchun ekranning pastki qismidagi panel. U 2 dan 5 gacha yorliqli belgilarni o‘z ichiga oladi va NavigationBar orqali faol indikatsiya bilan Material 3 ni qo‘llab-quvvatlaydi. Scaffold uni ekranning pastki qismida joylashtiradi, tarkibning yopilmasligi uchun tanani avtomatik ravishda yuqoriga siljitadi.
FloatingActionButton — bu ekranning pastki o‘ng burchagida joylashtiriladigan dumaloq tugma. U ekrandagi asosiy harakat uchun ishlatiladi, masalan, yangi yozuv qo‘shish yoki xabar yuborish. Scaffold extended xususiyatlari orqali kengaytirilgan animatsiya bilan bir nechta FABni qo‘llab-quvvatlaydi.
Body — bu asosiy tarkib joylashtiriladigan ekranning markaziy maydoni. Body sifatida har qanday vidjet bo‘lishi mumkin: Column, ListView, GridView, Stack yoki moslashtirilgan kompozitsiya. Scaffold AppBar, BottomNavigationBar va SafeAreani hisobga olgan holda tananing balandligini avtomatik hisoblaydi, bu o‘lchamlarni qo‘lda sozlash zaruratini yo‘qotadi.
Scaffold ekranning ko‘rinishi va harakatini sozlash uchun 30 dan ortiq xususiyatlarni taqdim etadi. Ular orasida ham majburiy (body), ham bo‘shliqlar, fon va klaviatura holatini boshqaradigan ixtiyoriy xususiyatlar mavjud. Har bir xususiyatni tushunish interfeysni dizayn talablariga muvofiq aniq sozlashga yordam beradi.
| Xususiyat | Tur | Tavsif |
|---|---|---|
| appBar | PreferredSizeWidget? | Sarlavha va harakatlar bilan ekranning yuqori paneli |
| body | Widget? | AppBar va BottomNavigationBar orasidagi ekranning asosiy tarkibi |
| drawer | Widget? | Chapga surish bilan ochiladigan yon panel |
| bottomNavigationBar | Widget? | Pastki navigatsiya paneli (BottomNavigationBar yoki NavigationBar) |
| floatingActionButton | Widget? | Asosiy harakatning suzuvchi tugmasi |
| backgroundColor | Color? | Mavzuni bekor qiluvchi Scaffold fon rangi |
| resizeToAvoidBottomInset | bool | Klaviatura paydo bo‘lganda tananing avtomatik siqilishi |
resizeToAvoidBottomInset xususiyati ayniqsa formalar bilan ishlashda muhim: true (standart) ga o‘rnatilganda, Scaffold klaviatura paydo bo‘lganda tanani avtomatik siqadi, shunda kiritish maydoni ko‘rinadigan bo‘lib qoladi. Bu maxsus klaviatura tinglovchilarini yozish zaruratini yo‘qotadi. SingleChildScrollView bilan maxsus stsenariylar uchun xususiyatni o‘chirish mumkin.
Material komponentlarining to‘liq to‘plami bilan Scaffoldning amaliy namunasini ko‘rib chiqaylik. Kod AppBar, Drawer, BottomNavigationBar, FloatingActionButton va SnackBar bilan ekran yaratadi — Flutterdagi mobil ilovaning odatiy tuzilishi.
class MainScreen extends StatefulWidget {
const MainScreen({super.key});
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
int selectedIndex = 0;
final List<Widget> pages = [
const HomePage(),
const SearchPage(),
const ProfilePage(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Mening Ilovam'),
actions: [
IconButton(icon: const Icon(Icons.search), onPressed: () {}),
],
),
body: pages[selectedIndex],
drawer: Drawer(
child: ListView(
children: [
const DrawerHeader(child: Text('Menyu')),
ListTile(title: const Text('Sozlamalar'), onTap: () {}),
],
),
),
bottomNavigationBar: NavigationBar(
selectedIndex: selectedIndex,
onDestinationSelected: (int index) {
setState(() => selectedIndex = index);
},
destinations: const [
NavigationDestination(icon: Icon(Icons.home), label: 'Home'),
NavigationDestination(icon: Icon(Icons.search), label: 'Search'),
NavigationDestination(icon: Icon(Icons.person), label: 'Profile'),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Amaliyot tugallandi')),
);
},
child: const Icon(Icons.add),
),
);
}
}
Namunada eskirgan BottomNavigationBar o‘rniga Material 3 dan NavigationBar ishlatilgan. Scaffold barcha qismlarni avtomatik bog‘laydi: Drawer ochilganda SnackBar yashiriladi, varaqlar almashtirilganda tana yangilanadi, FloatingActionButton esa joyida qoladi. ScaffoldMessenger iyerarxiyada bir nechta Scaffold bo‘lsa ham SnackBarning ko‘rsatilishini kafolatlaydi.
Material 3 (M3) — bu Google tomonidan 2023 yilda taqdim etilgan Material Designning evolyutsiyasi. M3dagi Scaffold bir qator o‘zgarishlarni oldi: BottomNavigationBar o‘rniga yangi NavigationBar vidjeti, ColorScheme.fromSeed orqali Dynamic Color qo‘llab-quvvatlashi va komponentlarning bo‘shliqlari va balandligi bo‘yicha yangilangan tavsiyalar. M3ga o‘tish Scaffoldni almashtirishni talab qilmaydi — ilova mavzusini yangilash kifoya.
Loyihada Material 3 ni faollashtirish uchun ThemeData da useMaterial3: true ni o‘rnatish kerak. Scaffold vizual ko‘rinishni avtomatik moslashtiradi: bo‘shliqlar kattalashadi (16dp o‘rniga 24dp), ranglar seed rangdan qayta hisoblanadi, FloatingActionButton esa yumaloq burchaklar bilan kattaroq o‘lchamlar oladi. Shu bilan birga, Scaffoldning barcha mavjud xususiyatlari ishlaydi.
Material Design 3 Specification (2026) ma’lumotlariga ko‘ra, BottomNavigationBar o‘rniga uch-besh bandli NavigationBar dan foydalanish tavsiya etiladi. Scaffold ikkala variantni ham qo‘llab-quvvatlaydi, ammo NavigationBar Pixel qurilmalarida moslashuvchanlik va Material You uchun yaxshiroq qo‘llab-quvvatlashni ta’minlaydi.
Scaffoldning M3 bilan to‘g‘ri ishlashi uchun mavzuni yangilash va BottomNavigationBar ni NavigationBar bilan almashtirish kifoya. Ranglar ColorScheme.fromSeed orqali avtomatik hisoblanadi, Scaffold esa bo‘shliqlarni yangi standartlarga moslashtiradi. Kerak bo‘lsa, backgroundColor ni to‘g‘ridan-to‘g‘ri bekor qilish mumkin.
Tez-tez beriladigan savollar
Scaffold — bu Material komponentlarini (AppBar, Drawer, SnackBar) qo‘llab-quvvatlaydigan butun ekranning vidjet-ramkasi, Container esa ekran tuzilishini boshqarmasdan bitta bola elementi uchun asosiy konteynerdir. Scaffold z-tartibi, SafeArea va imo-ishoralarni avtomatik qayta ishlashni ta’minlaydi, Container esa faqat o‘lchamlar va uslubni belgilaydi.
Texnik jihatdan ha, lekin amalda tavsiya etilmaydi. Agar bir Scaffoldni ikkinchisining ichiga joylashtirsangiz, ichki Scaffold o‘zining AppBar va BottomNavigationBarini yaratadi, bu panellarning takrorlanishiga va z-tartibida chalkashlikka olib keladi. Murakkab maketlar uchun bitta Scaffoldning body si ichida NestedScrollView yoki Columndan foydalaning.
SnackBar Scaffoldning bola komponentidir va to‘g‘ri ko‘rsatilishi uchun uning vidjetlar daraxtida bo‘lishini talab qiladi. Scaffold ScaffoldState ni taqdim etadi, uning orqali SnackBar paydo bo‘lishini animatsiya qiladi va ekranning pastki qismida joylashadi. Scaffoldsiz SnackBar istisno tashlaydi, chunki InheritedWidget orqali kontekstda ScaffoldState topa olmaydi.
Scaffoldning fon rangi ma’lum bir ekran uchun mavzu rangini bekor qiladigan backgroundColor xususiyati orqali o‘rnatiladi. Fonni global o‘zgartirishni istasangiz, ThemeData da scaffoldBackgroundColor ni o‘rnating. Material 3 fon rangini ColorScheme.surface dan avtomatik hisoblaydi, lekin uni qo‘lda bekor qilish mumkin.
ScaffoldMessenger — bu Flutter 2.5 da taqdim etilgan, iyerarxiyadagi joriy Scaffolddan qat’i nazar SnackBar va BottomSheet ko‘rsatish imkonini beruvchi vositadir. Eskirgan Scaffold.of(context) dan farqli o‘laroq, ScaffoldMessenger ekranlar o‘rtasida navigatsiya paytida to‘g‘ri ishlaydi va animatsiyalar paytida kontekstni yo‘qotmaydi. Fikr bildirish uchun har doim ScaffoldMessengerdan foydalanish tavsiya etiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.