flatrTakéFlutter SDK, Flutter frameworkPokročilý
Definice
Flutter je open source UI framework od Googlu, který z jedné kódové základny v jazyce Dart staví aplikace pro Android, iOS, web, Windows, macOS a Linux. Uživatelské rozhraní si vykresluje vlastním grafickým enginem místo nativních komponent, takže vypadá na všech platformách stejně a chová se předvídatelně.
Než se na to spolehnete: Identifikátor Wikidata pro Flutter uvádím z paměti a nemusí sedět; server jej ověří. Rovněž URL článku o Skii se může lišit v přesném názvu stránky. Stav podpory WebAssembly na Flutter webu se rychle vyvíjí.
Proč Flutter kreslí UI sám
Většina multiplatformních nástrojů se snaží obalit nativní komponenty každého systému a udržet je v jednom API. Flutter zvolil opačnou cestu: veškeré rozhraní vykresluje vlastní engine (dnes Impeller, dříve Skia) přímo na plátno okna. Tlačítko ve Flutteru tedy není systémové tlačítko, ale obrazec nakreslený frameworkem. Důsledkem je, že stejný kód dá na Androidu i iOS pixelově velmi podobný výsledek a chování se neláme s každou aktualizací systému. Cenou je větší velikost buildu a nutnost doplňovat platformní zvyklosti ručně, pokud je aplikace má respektovat.
Widgety a rebuild místo ručních úprav
Celé rozhraní se ve Flutteru popisuje jako strom widgetů. Widget je neměnný popis toho, jak má daná část obrazovky vypadat v konkrétním stavu; framework z něj odvozuje strom elementů a strom vykreslovacích objektů. Když se změní stav, vývojář nemění existující prvky, ale zavolá setState (nebo použije state management jako Riverpod, Bloc či Provider) a Flutter přepočítá jen dotčenou část stromu. Tenhle deklarativní model je blízký Reactu a je hlavním důvodem, proč vývojáři z webu přecházejí do Flutteru relativně rychle.
Dart, JIT při vývoji a AOT v produkci
Flutter je pevně svázaný s jazykem Dart. Během vývoje běží Dart v JIT režimu, což umožňuje hot reload: uložený soubor se během zlomku sekundy propíše do běžící aplikace bez ztráty stavu obrazovky. Pro release build se kód kompiluje AOT do nativního strojového kódu ARM nebo x86, takže výsledek nepotřebuje interpret ani JavaScriptový most. Na webu se Dart překládá do JavaScriptu nebo WebAssembly, což je zároveň platforma, kde má Flutter nejvíc kompromisů.
Kde Flutter naráží
Silnou stránkou je rozsáhlé grafické UI, animace a produkty, kde má značka vlastní design system a nechce nativní vzhled. Slabinou je web: aplikace se vykresluje na plátno, takže text není běžnou součástí DOM a indexace i přístupnost vyžadují zvláštní péči. Marketingový web ve Flutteru je špatná volba. Problém nastává i tam, kde aplikace stojí na hlubokých systémových API; pak je potřeba psát platform channels, tedy most do Kotlinu, Swiftu nebo C++.
Ekosystém balíčků
Knihovny se distribuují přes pub.dev. Kvalita je nevyrovnaná: u okrajových integrací se stává, že balíček nemá údržbu a tým skončí u vlastní implementace platform channelu. Před volbou Flutteru pro konkrétní projekt se vyplatí ověřit dostupnost SDK dodavatelů, které aplikace potřebuje (platební brány, mapy, analytika).
Příklady z praxe
Jednoduchá obrazovka s počítadlem
Základní ukázka ukazuje deklarativní princip: metoda build popisuje, jak má obrazovka vypadat pro aktuální hodnotu proměnné. Volání setState nezmění tlačítko ani text ručně, jen oznámí frameworku, že se stav změnil, a Flutter build spustí znovu. Hot reload přitom udrží aktuální hodnotu počítadla.
class Counter extends StatefulWidget { const Counter({super.key}); @override State<Counter> createState() => _CounterState(); } class _CounterState extends State<Counter> { int _count = 0; @override Widget build(BuildContext context) { return Scaffold( body: Center(child: Text('Kliknutí: $_count')), floatingActionButton: FloatingActionButton( onPressed: () => setState(() => _count++), child: const Icon(Icons.add), ), ); } }Interní aplikace pro terénní techniky
Servisní firma potřebuje aplikaci pro Android i iOS s formuláři, fotkami zakázek a offline režimem. Tým o třech lidech nemá kapacitu na dvě nativní kódové základny, vzhled si navrhl vlastní a nativní look nepotřebuje. Flutter tu dává smysl: jedna aplikace, sdílená logika, přístup ke kameře a lokálnímu úložišti přes ověřené balíčky. Nativní kód by byl potřeba jen u napojení na konkrétní čtečku čárových kódů.
Časté omyly
- MýtusFlutter aplikace jsou jen webview zabalené do appky.
- Ve skutečnostiFlutter nepoužívá webview ani HTML. Dart kód se pro release kompiluje AOT do nativního strojového kódu a rozhraní vykresluje grafický engine přímo přes GPU.
- MýtusFlutter vypadá na iOS jako Android, takže bude uživatelům vadit.
- Ve skutečnostiFlutter nabízí kromě Material knihovnu Cupertino s iOS vzhledem a chování lze rozlišit podle platformy. Většina produktů dnes stejně používá vlastní design system, kde je jednotný vzhled záměr.
- MýtusFlutter je dobrá volba i na běžný web.
- Ve skutečnostiFlutter web kreslí obsah na plátno, takže text a odkazy nejsou standardní DOM. Pro obsahové a marketingové weby, kde záleží na SEO a přístupnosti, je vhodnější klasický HTML framework.
Časté dotazy
- Jaký jazyk je potřeba umět pro Flutter?
- Flutter se programuje výhradně v jazyce Dart, který vyvíjí rovněž Google. Dart je staticky typovaný objektový jazyk se syntaxí blízkou Javě, C# a TypeScriptu, takže přechod z těchto jazyků bývá otázkou několika dní. Znalost Kotlinu, Swiftu nebo C++ není pro start nutná, hodí se až ve chvíli, kdy aplikace potřebuje vlastní platform channel k systémovému API, které nepokrývá žádný balíček z pub.dev.
- Kdy zvolit Flutter místo nativního vývoje?
- Flutter se vyplatí tam, kde má tým jednu menší kapacitu a potřebuje aplikaci na Android i iOS zároveň, kde je hodně vlastního UI a animací a kde produkt stojí na vlastním design systemu místo nativního vzhledu. Nativní vývoj zůstává lepší volbou u aplikací silně závislých na nových systémových API, u náročné práce s kamerou nebo senzory, u widgetů na plochu a všude, kde je kritická minimální velikost instalačního balíčku.
- Co je hot reload a proč se u Flutteru tolik zmiňuje?
- Hot reload je funkce Flutteru, která po uložení souboru vloží změněný Dart kód do už běžící aplikace a překreslí rozhraní, aniž by se aplikace restartovala a ztratila stav. Vývojář tak vidí úpravu odsazení nebo barvy během okamžiku, i když je zanořený deset obrazovek hluboko. Hot reload funguje díky JIT kompilaci v debug režimu; release build se kompiluje AOT a hot reload v něm dostupný není.
- Kolik platforem Flutter opravdu pokrývá v produkční kvalitě?
- Flutter oficiálně podporuje Android, iOS, web, Windows, macOS a Linux. V praxi jsou nejvyzrálejší mobilní platformy, na kterých framework vznikl a kde má největší nasazenou základnu. Desktopové cíle jsou použitelné, ale ekosystém balíčků je slabší a část knihoven má implementaci jen pro mobil. Web je funkční pro aplikační rozhraní za přihlášením, nikoli pro veřejné obsahové stránky, kde vadí vykreslování na plátno.
Zdroje
- Flutter(otevře se v novém okně)
- Dart (programming language)(otevře se v novém okně)
- Skia Graphics Library(otevře se v novém okně)
- Flutter(otevře se v novém okně)