Scaffold: co to je, struktura a widgety Flutter

Autor: IT Sectr Publikováno: 2026-07-02 Doba čtení: 9 min

Scaffold — je centrální widget-kostra ve Flutter, která implementuje základní strukturu obrazovky Material Design s AppBar, Drawer, BottomNavigationBar a FloatingActionButton. Nejenže pozicionuje prvky, ale poskytuje hotovou architekturu se správným z-pořadím a zpracováním uživatelských gest. Podle Flutter Documentation (2026) je Scaffold povinným kořenovým prvkem pro správnou funkci Material komponent, včetně SnackBar a BottomSheet. Na rozdíl od Container nebo Column, Scaffold automaticky spravuje SafeArea, adaptivní pozadí a chování klávesnice, což z něj činí standard pro budování obrazovek v mobilních aplikacích.

Hlavní body

  • Scaffold — widget-kostra implementující strukturu obrazovky Material Design ve Flutter s AppBar, Drawer, BottomNavigationBar a FloatingActionButton
  • Body — centrální oblast obrazovky, do které se umisťuje hlavní obsah pomocí vlastnosti body
  • Drawer — postranní nabídka, která se otevírá posunutím doleva nebo pomocí ikony hamburgeru v AppBar
  • FloatingActionButton — plovoucí tlačítko akce umístěné v pravém dolním rohu podle standardu Material Design
  • SnackBar — dočasné oznámení v dolní části obrazovky, vyvolané pomocí ScaffoldMessenger pro zpětnou vazbu uživatele

Co je Scaffold ve Flutter

Scaffold — je widget-kompozitor z knihovny Material Design, který tvoří základní vizuální strukturu obrazovky. Implementuje standardní vzor Material aplikace: horní panel, tělo obrazovky, postranní nabídku a plovoucí tlačítka. Na rozdíl od Container, který pouze nastavuje rozměry a styl, Scaffold spravuje celou obrazovku jako jediný systém.

Každá Flutter aplikace postavená podle Material Design začíná MaterialApp, uvnitř které je každá obrazovka zabalena do Scaffold. Právě Scaffold zajišťuje správné zobrazení AppBar na všech zařízeních, s ohledem na SafeArea pro iPhone X a novější. Také zodpovídá za z-pořadí: Drawer se zobrazuje nad body a SnackBar — nad celým rozhraním, ale pod dialogovými okny.

Podle oficiální Flutter API Reference (2026) je Scaffold povinnou podmínkou pro správnou funkci widgetů jako SnackBar, BottomSheet a PersistentBottomSheet. Bez Scaffold tyto komponenty vyhazují výjimku, protože závisí na InheritedWidget Scaffold.of pro přístup ke kontextu Scaffold. Proto je umístění jakéhokoli obsahu přímo do Container místo Scaffold častou chybou začínajících vývojářů, což vede ke ztrátě funkcionality Material.

Scaffold v hierarchii widgetů

V typické Flutter aplikaci se Scaffold nachází uvnitř MaterialApp, obvykle pod WidgetsApp nebo CupertinoApp při cross-platform vývoji. MaterialApp vytváří Navigator a téma, a Scaffold určuje strukturu aktuální obrazovky. Každá obrazovka může mít vlastní Scaffold s jedinečným AppBar, Drawer a BottomNavigationBar, což umožňuje flexibilní přizpůsobení rozhraní pro konkrétní stránku.

Pro hlubokou customizaci lze Scaffold kombinovat s NestedScrollView — to umožňuje implementaci komplexních efektů posouvání, například mizejícího AppBar s paralaxním efektem. Nicméně ve většině případů standardní Scaffold se svými vlastnostmi stačí pro vybudování produkčně připravené obrazovky.

Struktura Scaffold: klíčové části kostry

Scaffold se skládá z několika povinných a volitelných zón, z nichž každá je zodpovědná za určitou část rozhraní. Podívejme se na každou část zvlášť, abychom pochopili, jak vzájemně interagují.

AppBar — horní panel

AppBar — horní panel obrazovky, který zobrazuje název, navigační tlačítko a akce. Automaticky získává správnou výšku 56dp a bere v úvahu SafeArea pro zařízení s výřezem. Do AppBar lze vložit TabBar pro přepínání karet pomocí vlastnosti bottom.

Drawer — postranní nabídka

Drawer — panel vysouvající se zleva a poskytující navigaci sekcemi aplikace. Scaffold automaticky přidá ikonu hamburgeru do AppBar, pokud je vlastnost drawer nastavena. Drawer může obsahovat DrawerHeader, ListView s položkami nabídky a uživatelské informace.

BottomNavigationBar — dolní navigace

BottomNavigationBar — panel v dolní části obrazovky pro přepínání mezi hlavními sekcemi. Obsahuje 2 až 5 ikon s popisky a podporuje Material 3 s aktivní indikací prostřednictvím NavigationBar. Scaffold jej umístí do spodní části obrazovky, automaticky posune body výše, aby obsah nebyl zakryt.

FloatingActionButton — plovoucí tlačítko

FloatingActionButton — kulaté tlačítko umístěné v pravém dolním rohu obrazovky. Používá se pro hlavní akci na obrazovce, například přidání nového záznamu nebo odeslání zprávy. Scaffold podporuje více FAB s rozšířenou animací prostřednictvím extended vlastností.

Body — hlavní obsah

Body — centrální oblast obrazovky, do které se umisťuje hlavní obsah. Jako body může být jakýkoli widget: Column, ListView, GridView, Stack nebo vlastní kompozice. Scaffold automaticky vypočítá výšku body s ohledem na AppBar, BottomNavigationBar a SafeArea, což eliminuje potřebu ručního nastavování rozměrů.

Hlavní vlastnosti Scaffold

Scaffold poskytuje přes 30 vlastností pro konfiguraci vzhledu a chování obrazovky. Mezi nimi jsou jak povinné (body), tak volitelné vlastnosti, které spravují mezery, pozadí a stav klávesnice. Pochopení každé vlastnosti pomáhá přesně naladit rozhraní podle požadavků designu.

VlastnostTypPopis
appBarPreferredSizeWidget?Horní panel obrazovky s názvem a akcemi
bodyWidget?Hlavní obsah obrazovky mezi AppBar a BottomNavigationBar
drawerWidget?Postranní panel otevírající se posunutím doleva
bottomNavigationBarWidget?Dolní navigační panel (BottomNavigationBar nebo NavigationBar)
floatingActionButtonWidget?Plovoucí tlačítko hlavní akce
backgroundColorColor?Barva pozadí Scaffold přepisující téma
resizeToAvoidBottomInsetboolAutomatické stlačení body při objevení klávesnice

Vlastnost resizeToAvoidBottomInset je zvláště důležitá při práci s formuláři: když je nastavena na true (výchozí), Scaffold automaticky stlačí body při objevení klávesnice, aby vstupní pole zůstalo viditelné. To eliminuje potřebu psát vlastní posluchače klávesnice. Pro vlastní scénáře s SingleChildScrollView lze vlastnost vypnout.

Příklad použití Scaffold v aplikaci

Podívejme se na praktický příklad Scaffold s plnou sadou Material komponent. Kód vytváří obrazovku s AppBar, Drawer, BottomNavigationBar, FloatingActionButton a SnackBar — typickou strukturu mobilní aplikace ve Flutter.

dart
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('Moje Aplikace'),
        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('Nastavení'), 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('Akce dokončena')),
          );
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}

V příkladu je použit NavigationBar z Material 3 místo zastaralého BottomNavigationBar. Scaffold automaticky propojuje všechny části: při otevření Drawer je SnackBar skryt, při přepínání karet se body aktualizuje a FloatingActionButton zůstává na svém místě. ScaffoldMessenger garantuje zobrazení SnackBar i při více Scaffold v hierarchii.

Scaffold a Material 3: vlastnosti konfigurace

Material 3 (M3) — je evoluce Material Design, představená Googlem v roce 2023. Scaffold v M3 obdržel řadu změn: nový widget NavigationBar místo BottomNavigationBar, podporu Dynamic Color prostřednictvím ColorScheme.fromSeed a aktualizovaná doporučení pro mezery a výšky komponent. Přechod na M3 nevyžaduje výměnu Scaffold — stačí aktualizovat téma aplikace.

Pro aktivaci Material 3 v projektu je třeba nastavit useMaterial3: true v ThemeData. Scaffold automaticky přizpůsobí vizuální vzhled: mezery se zvětší (24dp místo 16dp), barvy se přepočítají z seed barvy a FloatingActionButton získá větší rozměry se zaoblenými rohy. Všechny stávající vlastnosti Scaffold přitom zůstávají funkční.

Podle Material Design 3 Specification (2026) se doporučuje používat NavigationBar se třemi až pěti položkami místo BottomNavigationBar. Scaffold podporuje obě varianty, ale NavigationBar poskytuje lepší podporu pro adaptabilitu a Material You na zařízeních Pixel.

Konfigurace Scaffold pro Material 3

Pro správnou funkci Scaffold s M3 stačí aktualizovat téma a nahradit BottomNavigationBar za NavigationBar. Barvy budou automaticky vypočítány pomocí ColorScheme.fromSeed a Scaffold přizpůsobí mezery novým standardům. V případě potřeby lze přímo přepsat backgroundColor.

Často kladené dotazy

Čím se liší Scaffold od Container ve Flutter?

Scaffold — je widget-kostra celé obrazovky s podporou Material komponent (AppBar, Drawer, SnackBar), zatímco Container je základní kontejner pro jeden potomků bez správy struktury obrazovky. Scaffold poskytuje z-pořadí, SafeArea a automatické zpracování gest, zatímco Container pouze nastavuje rozměry a styl.

Lze použít dva Scaffold na jedné obrazovce?

Technicky ano, ale v praxi se to nedoporučuje. Pokud vložíte jeden Scaffold do druhého, vnitřní Scaffold vytvoří vlastní AppBar a BottomNavigationBar, což povede k duplicitě panelů a zmatku v z-pořadí. Pro komplexní rozvržení použijte NestedScrollView nebo Column uvnitř body jednoho Scaffold.

Proč se SnackBar nezobrazuje bez Scaffold?

SnackBar je potomkem komponentou Scaffold a vyžaduje jeho přítomnost ve stromu widgetů pro správné zobrazení. Scaffold poskytuje ScaffoldState, prostřednictvím kterého SnackBar animuje své zobrazení a je umístěn v dolní části obrazovky. Bez Scaffold SnackBar vyhazuje výjimku, protože nemůže najít ScaffoldState v kontextu prostřednictvím InheritedWidget.

Jak změnit barvu pozadí Scaffold?

Barva pozadí Scaffold se nastavuje pomocí vlastnosti backgroundColor, která přepisuje barvu tématu pro konkrétní obrazovku. Pokud chcete změnit pozadí globálně, nastavte scaffoldBackgroundColor v ThemeData. Material 3 automaticky vypočítává barvu pozadí z ColorScheme.surface, ale lze ji ručně přepsat.

Co je ScaffoldMessenger a k čemu slouží?

ScaffoldMessenger — je nástroj představený ve Flutter 2.5, který umožňuje zobrazovat SnackBar a BottomSheet nezávisle na aktuálním Scaffold v hierarchii. Na rozdíl od zastaralého Scaffold.of(context) funguje ScaffoldMessenger správně při navigaci mezi obrazovkami a neztrácí kontext při animacích. Doporučuje se vždy používat ScaffoldMessenger pro zpětnou vazbu.

Shrnutí

  • Scaffold — hlavní widget-kostra ve Flutter implementující strukturu obrazovky Material Design s AppBar, Drawer, BottomNavigationBar, FloatingActionButton a body
  • AppBar — horní panel s názvem, tlačítky akcí a možností vložení TabBar pro přepínání karet
  • Drawer — postranní navigační nabídka automaticky integrovaná s AppBar pomocí ikony hamburgeru
  • Body — centrální zóna pro hlavní obsah, jejíž velikost je automaticky vypočítána s ohledem na okolní panely a SafeArea
  • ScaffoldMessenger — moderní API pro zobrazení SnackBar a BottomSheet, které správně funguje při navigaci mezi obrazovkami
  • Material 3 — Scaffold plně podporuje M3 pomocí parametru useMaterial3 a NavigationBar místo zastaralého BottomNavigationBar
  • FloatingActionButton — plovoucí tlačítko hlavní akce umístěné v pravém dolním rohu s možností přizpůsobení pozice a animace

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také