← Playground
Android · iOS · Flutter · React Native
One concept, four dialects
Every mobile platform solves the same problems — only the vocabulary changes. If you know one column, you already know most of the other three. Tap any row to find out what it really is.
Tap any concept to see what it really is, in plain English.
| CONCEPT | Android | iOS | Flutter | React Native |
|---|---|---|---|---|
| UI building block | View · @Composable | UIView · SwiftUI View | Widget | Component |
| A screen | Activity · Fragment | UIViewController | Route · Scaffold | Screen |
| Layout | ConstraintLayout · Column/Row | AutoLayout · VStack/HStack | Column · Row | View + Flexbox |
| Long list | RecyclerView · LazyColumn | UITableView · List | ListView.builder | FlatList |
| Local state | ViewModel · remember { } | @State · @Observable | setState · Riverpod | useState · Redux |
| Async work | Coroutines · suspend | async / await | Future · async / await | Promise · async / await |
| Off the UI thread | Dispatchers.IO / Default | DispatchQueue.global() | compute() · Isolate | Native module · Worklet |
| Networking | Retrofit · OkHttp | URLSession | Dio · http | fetch · Axios |
| Local storage | Room · DataStore | SwiftData · UserDefaults | sqflite · Hive | AsyncStorage · MMKV |
| Navigation | Navigation Component | NavigationStack | Navigator | React Navigation |
| Dependencies | Gradle | SPM · CocoaPods | pub · pubspec.yaml | npm · yarn |
| Entry point | MainActivity | @main App | main() → runApp() | App.tsx |
12 concepts
4 platforms
1 set of ideas
You're not learning four platforms
You're learning one set of ideas in four dialects. State, threading, lifecycle, storage, navigation — the hard parts are identical everywhere; the syntax is just a lookup. That's why moving from Android to Flutter takes weeks, not years: you already know what you're looking for, you just need the local word for it.
Want the idea to actually stick?
Two of these rows have a game — play them and you'll never mix them up again.