Scaffold — ay isang sentral na widget-balangkas sa Flutter na nagpapatupad ng pangunahing istraktura ng Material Design screen na may AppBar, Drawer, BottomNavigationBar at FloatingActionButton. Hindi lamang ito nagpo-position ng mga elemento, kundi nagbibigay ng handa na arkitektura na may tamang z-order at pagproseso ng mga kilos ng user. Ayon sa Flutter Documentation (2026), ang Scaffold ay isang sapilitang root element para sa tamang paggana ng mga Material component, kabilang ang SnackBar at BottomSheet. Hindi tulad ng Container o Column, awtomatikong pinamamahalaan ng Scaffold ang SafeArea, adaptive background, at pag-uugali ng keyboard, ginagawa itong pamantayan para sa pagbuo ng mga screen sa mga mobile app.
Mga Pangunahing Punto
Scaffold — ay isang widget-compositor mula sa Material Design library na bumubuo ng pangunahing visual na istraktura ng screen. Ipinapatupad nito ang karaniwang pattern ng Material app: itaas na panel, katawan ng screen, side menu, at lumulutang na mga button. Hindi tulad ng Container na nagtatakda lamang ng mga sukat at estilo, pinamamahalaan ng Scaffold ang buong screen bilang isang pinag-isang sistema.
Bawat Flutter app na binuo ayon sa Material Design ay nagsisimula sa MaterialApp, sa loob kung saan ang bawat screen ay nakabalot sa Scaffold. Ito ang Scaffold na nagsisiguro ng tamang pagpapakita ng AppBar sa lahat ng device, isinasaalang-alang ang SafeArea para sa iPhone X at mas bago. Ito rin ang responsable para sa z-order: Ang Drawer ay ipinapakita sa itaas ng body, at ang SnackBar — sa itaas ng buong interface, ngunit sa ibaba ng mga dialog window.
Ayon sa opisyal na Flutter API Reference (2026), ang Scaffold ay isang sapilitang kondisyon para sa tamang paggana ng mga widget tulad ng SnackBar, BottomSheet at PersistentBottomSheet. Kung walang Scaffold, ang mga component na ito ay nag-throw ng exception dahil umaasa sila sa InheritedWidget Scaffold.of para ma-access ang konteksto ng Scaffold. Kaya ang paglalagay ng anumang nilalaman nang direkta sa Container sa halip na Scaffold ay isang karaniwang pagkakamali ng mga baguhang developer, na nagreresulta sa pagkawala ng Material functionality.
Sa isang tipikal na Flutter app, ang Scaffold ay nasa loob ng MaterialApp, karaniwan sa ilalim ng WidgetsApp o CupertinoApp sa cross-platform development. Ang MaterialApp ay lumilikha ng Navigator at tema, at ang Scaffold ay tumutukoy sa istraktura ng kasalukuyang screen. Bawat screen ay maaaring magkaroon ng sarili nitong Scaffold na may natatanging AppBar, Drawer at BottomNavigationBar, na nagpapahintulot ng flexible na pagsasaayos ng interface para sa isang partikular na pahina.
Para sa malalim na customization, ang Scaffold ay maaaring pagsamahin sa NestedScrollView — ito ay nagpapahintulot ng pagpapatupad ng mga kumplikadong scroll effect, halimbawa, isang nawawalang AppBar na may parallax effect. Gayunpaman, sa karamihan ng mga kaso, ang standard na Scaffold kasama ang mga property nito ay sapat na para sa pagbuo ng production-ready na screen.
Scaffold ay binubuo ng ilang sapilitan at opsyonal na mga zone, bawat isa ay responsable para sa isang partikular na bahagi ng interface. Tingnan natin ang bawat bahagi nang hiwalay upang maunawaan kung paano sila nag-interact sa isa’t isa.
AppBar — itaas na panel ng screen na nagpapakita ng pamagat, navigation button, at mga aksyon. Awtomatiko itong nakakakuha ng tamang taas na 56dp at isinasaalang-alang ang SafeArea para sa mga device na may notch. Sa AppBar ay maaaring i-embed ang TabBar para sa paglipat ng mga tab gamit ang bottom property.
Drawer — panel na lumalabas mula sa kaliwa at nagbibigay ng navigation sa mga section ng app. Awtomatikong nagdaragdag ang Scaffold ng hamburger icon sa AppBar kung ang drawer property ay nakatakda. Ang Drawer ay maaaring maglaman ng DrawerHeader, ListView na may mga item sa menu, at impormasyon ng user.
BottomNavigationBar — panel sa ibabang bahagi ng screen para sa paglipat sa pagitan ng mga pangunahing section. Naglalaman ito ng 2 hanggang 5 icon na may mga label at sumusuporta sa Material 3 na may aktibong indikasyon sa pamamagitan ng NavigationBar. Inilalagay ito ng Scaffold sa ilalim ng screen, awtomatikong inaangat ang body upang hindi matakpan ang nilalaman.
FloatingActionButton — isang bilog na button na inilalagay sa kanang ibabang sulok ng screen. Ginagamit ito para sa pangunahing aksyon sa screen, halimbawa, pagdagdag ng bagong entry o pagpapadala ng mensahe. Sinusuportahan ng Scaffold ang maraming FAB na may pinahabang animation sa pamamagitan ng extended properties.
Body — sentral na lugar ng screen kung saan inilalagay ang pangunahing nilalaman. Bilang body ay maaaring maging anumang widget: Column, ListView, GridView, Stack o custom na komposisyon. Awtomatikong kinakalkula ng Scaffold ang taas ng body na isinasaalang-alang ang AppBar, BottomNavigationBar at SafeArea, na nag-aalis ng pangangailangan para sa manu-manong pagsasaayos ng laki.
Scaffold ay nagbibigay ng higit sa 30 property para sa pag-configure ng hitsura at pag-uugali ng screen. Kabilang sa mga ito ay parehong sapilitan (body) at opsyonal na mga property na namamahala ng mga puwang, background, at estado ng keyboard. Ang pag-unawa sa bawat property ay tumutulong na tumpak na ayusin ang interface ayon sa mga pangangailangan ng disenyo.
| Property | Uri | Paglalarawan |
|---|---|---|
| appBar | PreferredSizeWidget? | Itaas na panel ng screen na may pamagat at mga aksyon |
| body | Widget? | Pangunahing nilalaman ng screen sa pagitan ng AppBar at BottomNavigationBar |
| drawer | Widget? | Side panel na nagbubukas sa pamamagitan ng pag-swipe pakaliwa |
| bottomNavigationBar | Widget? | Ilalim na navigation panel (BottomNavigationBar o NavigationBar) |
| floatingActionButton | Widget? | Lumulutang na button ng pangunahing aksyon |
| backgroundColor | Color? | Kulay ng background ng Scaffold na nag-o-override sa tema |
| resizeToAvoidBottomInset | bool | Awtomatikong pag-compress ng body kapag lumitaw ang keyboard |
Ang property na resizeToAvoidBottomInset ay lalong mahalaga kapag nagtatrabaho sa mga form: kapag nakatakda sa true (default), awtomatikong pinipiga ng Scaffold ang body kapag lumitaw ang keyboard upang manatiling nakikita ang input field. Tinatanggal nito ang pangangailangan na sumulat ng custom na keyboard listener. Para sa custom na scenario na may SingleChildScrollView, ang property ay maaaring i-disable.
Tingnan natin ang isang praktikal na halimbawa ng Scaffold na may kumpletong set ng Material component. Ang code ay lumilikha ng screen na may AppBar, Drawer, BottomNavigationBar, FloatingActionButton at SnackBar — tipikal na istraktura ng isang mobile app sa Flutter.
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('Aking App'),
actions: [
IconButton(icon: const Icon(Icons.search), onPressed: () {}),
],
),
body: pages[selectedIndex],
drawer: Drawer(
child: ListView(
children: [
const DrawerHeader(child: Text('Menu')),
ListTile(title: const Text('Mga Setting'), 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('Nakumpleto ang aksyon')),
);
},
child: const Icon(Icons.add),
),
);
}
}
Sa halimbawa, ginagamit ang NavigationBar mula sa Material 3 sa halip na lumang BottomNavigationBar. Awtomatikong iniuugnay ng Scaffold ang lahat ng bahagi: kapag binuksan ang Drawer, nakatago ang SnackBar; kapag nagpalit ng tab, naa-update ang body; at nananatili sa lugar ang FloatingActionButton. Ginagarantiyahan ng ScaffoldMessenger ang pagpapakita ng SnackBar kahit na may maraming Scaffold sa hierarchy.
Material 3 (M3) — ay ang ebolusyon ng Material Design, na ipinakilala ng Google noong 2023. Ang Scaffold sa M3 ay nakatanggap ng ilang pagbabago: bagong NavigationBar widget sa halip na BottomNavigationBar, suporta para sa Dynamic Color sa pamamagitan ng ColorScheme.fromSeed, at na-update na rekomendasyon para sa mga puwang at taas ng component. Ang paglipat sa M3 ay hindi nangangailangan ng pagpapalit ng Scaffold — sapat na upang i-update ang tema ng app.
Para i-activate ang Material 3 sa proyekto, kailangan mong itakda ang useMaterial3: true sa ThemeData. Awtomatikong inaayos ng Scaffold ang visual na anyo: nagiging mas malaki ang mga puwang (24dp sa halip na 16dp), muling kinakalkula ang mga kulay mula sa seed color, at ang FloatingActionButton ay nakakakuha ng mas malalaking sukat na may bilugan na sulok. Samantala, lahat ng umiiral na property ng Scaffold ay nananatiling functional.
Ayon sa Material Design 3 Specification (2026), inirerekomenda na gamitin ang NavigationBar na may tatlo hanggang limang item sa halip na BottomNavigationBar. Sinusuportahan ng Scaffold ang parehong variant, ngunit ang NavigationBar ay nagbibigay ng mas mahusay na suporta para sa adaptability at Material You sa mga Pixel device.
Para sa tamang paggana ng Scaffold sa M3, sapat na i-update ang tema at palitan ang BottomNavigationBar ng NavigationBar. Ang mga kulay ay awtomatikong kakalkulahin sa pamamagitan ng ColorScheme.fromSeed, at iaayos ng Scaffold ang mga puwang sa mga bagong pamantayan. Kung kinakailangan, maaari mong i-override ang backgroundColor nang direkta.
Mga Madalas Itanong
Scaffold — ay isang widget-balangkas ng buong screen na may suporta para sa Material component (AppBar, Drawer, SnackBar), samantalang ang Container ay isang pangunahing lalagyan para sa isang child element na walang pamamahala ng istraktura ng screen. Ang Scaffold ay nagbibigay ng z-order, SafeArea, at awtomatikong pagproseso ng kilos, habang ang Container ay nagtatakda lamang ng mga sukat at estilo.
Teknikal na oo, ngunit sa praktika ay hindi inirerekomenda. Kung ilalagay mo ang isang Scaffold sa loob ng isa pa, ang panloob na Scaffold ay gagawa ng sarili nitong AppBar at BottomNavigationBar, na magdudulot ng pagdoble ng panel at kalituhan sa z-order. Para sa mga kumplikadong layout, gamitin ang NestedScrollView o Column sa loob ng body ng isang Scaffold.
SnackBar ay isang child component ng Scaffold at nangangailangan ng presensya nito sa widget tree para sa tamang pagpapakita. Ang Scaffold ay nagbibigay ng ScaffoldState kung saan ang SnackBar ay nag-a-animate ng paglitaw at nagpo-position sa ibabang bahagi ng screen. Kung walang Scaffold, ang SnackBar ay nag-throw ng exception dahil hindi nito mahanap ang ScaffoldState sa konteksto sa pamamagitan ng InheritedWidget.
Ang kulay ng background ng Scaffold ay itinatakda sa pamamagitan ng backgroundColor property, na nag-o-override sa kulay ng tema para sa isang partikular na screen. Kung gusto mong baguhin ang background nang global, itakda ang scaffoldBackgroundColor sa ThemeData. Awtomatikong kinakalkula ng Material 3 ang kulay ng background mula sa ColorScheme.surface, ngunit maaari itong i-override nang manu-mano.
ScaffoldMessenger — ay isang utility na ipinakilala sa Flutter 2.5 na nagpapahintulot sa pagpapakita ng SnackBar at BottomSheet nang hiwalay sa kasalukuyang Scaffold sa hierarchy. Hindi tulad ng lumang Scaffold.of(context), ang ScaffoldMessenger ay gumagana nang tama sa pag-navigate sa pagitan ng mga screen at hindi nawawalan ng konteksto sa panahon ng mga animation. Inirerekomenda na laging gamitin ang ScaffoldMessenger para sa feedback.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din