Google's cross-platform UI toolkit. Renders its own pixel-identical UI on iOS, Android, web, desktop, and embedded — one Dart codebase, six platforms.
← Back to Client SideState object that survives rebuilds.class ProductList extends StatefulWidget { @override State<ProductList> createState() => _ProductListState(); } class _ProductListState extends State<ProductList> { List<Product> products = []; bool loading = true; @override void initState() { super.initState(); _load(); } Future<void> _load() async { final data = await api.fetchProducts(); setState(() { products = data; loading = false; }); } @override Widget build(BuildContext context) => Scaffold( appBar: AppBar(title: const Text('Products')), body: loading ? const Center(child: CircularProgressIndicator()) : ListView.builder( itemCount: products.length, itemBuilder: (_, i) => ListTile( title: Text(products[i].name), trailing: Text('\$\${products[i].price}'), ), ), ); }
Flutter doesn't use platform UI components. It draws every pixel through its own engine (originally Skia, now Impeller). This guarantees pixel-perfect parity across iOS, Android, web, and desktop — at the cost of platform widgets that "feel" 100% native.
| Approach | When to use |
|---|---|
| setState | Local widget state. |
| Provider | Recommended for most apps. |
| Riverpod | Modern successor to Provider — type-safe, testable. |
| BLoC | Stream-based; popular in larger Flutter codebases. |
| GetX / MobX | Reactive alternatives. |
Need camera, biometrics, or any platform-only API? Flutter exposes platform channels — a typed bridge to write Swift/Kotlin code from Dart. Most common needs already have a community plugin on pub.dev.
First-party widget sets that mimic Android (Material) and iOS (Cupertino) look-and-feel. Most teams use Material everywhere; Cupertino is available when iOS-native styling matters.
Custom design systems that should look identical everywhere.
Ship iOS + Android with one team.
BMW, Toyota, GM use Flutter in dashboards.
Mobile + desktop admin apps from one Dart codebase.