🌍 Mobile App Development · subject
Mobile App Development Cross-Platform Development Syllabus
Every chapter and topic of Cross-Platform Development examined in Mobile App Development — 6 chapters, 20 topics, plus 64 flashcards written against it.
Cross-Platform Development syllabus — full chapter and topic list
Expand any chapter to see its topics and sub-topics. This is the whole examinable outline for Cross-Platform Development in Mobile App Development, not a summary of it.
-
Flutter Fundamentals
4 topics- Widgets and Widget Tree
- Material and Cupertino Widgets
- Navigation and Routing
- Asset and Font Management
-
Flutter State Management
3 topics- setState and InheritedWidget
- Provider and Riverpod
- BLoC Pattern
-
React Native Fundamentals
4 topics- Core Components and JSX
- Styling and Flexbox
- Navigation (React Navigation)
- Expo vs Bare Workflow
-
React Native State and Data
3 topics- Hooks and Component State
- Context and Redux
- Data Fetching and React Query
-
Native Modules and Bridges
3 topics- Platform Channels in Flutter
- Native Modules in React Native
- Accessing Device APIs
-
Cross-Platform Trade-offs
3 topics- Performance Considerations
- Platform-Specific Code
- Code Sharing and Kotlin Multiplatform
Cross-Platform Development flashcards for Mobile App Development
21 of 64 cards from the Cross-Platform Development deck — real questions with worked answers.
In Flutter, what is a widget and what is the "widget tree"?
A widget is an immutable description of part of the UI. The widget tree is the hierarchical composition of these widgets (parents nesting children) that Flutter uses to build the interface; the framework builds an element tree and render tree from it to actually paint pixels.
In Flutter, what is the key difference between a StatelessWidget and a StatefulWidget?
A StatelessWidget is immutable and has no mutable internal state (rebuilds only when inputs change). A StatefulWidget pairs with a separate State object that persists across rebuilds and can call setState() to trigger UI updates when its data changes.
In Flutter's widget tree, what is the difference between the Widget tree, the Element tree, and the RenderObject tree?
The Widget tree is the immutable configuration. The Element tree is the mutable instantiation that manages lifecycle and links widgets to render objects. The RenderObject tree handles layout, painting, and hit-testing. Elements provide the stable identity that lets Flutter efficiently reuse render objects across rebuilds.
In Flutter, what is the purpose of a Key on a widget?
A Key preserves widget/element identity across rebuilds so Flutter can correctly match old elements to new widgets, especially in lists of same-type widgets. ValueKey, ObjectKey, and UniqueKey are local keys; GlobalKey uniquely identifies a widget app-wide and gives access to its State or BuildContext.
In Flutter, what are Material and Cupertino widgets, and when do you use each?
Material widgets (MaterialApp, Scaffold, AppBar) implement Google's Material Design, typically for Android/cross-platform. Cupertino widgets (CupertinoApp, CupertinoNavigationBar) implement Apple's iOS design language. Use Material for a unified look or Cupertino to match native iOS appearance.
In Flutter, what does the Scaffold widget provide?
Scaffold implements the basic Material visual layout structure: it provides slots for an appBar, body, floatingActionButton, drawer, bottomNavigationBar, and snackbars/bottom sheets, managing their placement on the screen.
In Flutter, contrast Container versus SizedBox and Row/Column as layout widgets.
Container is a convenience widget combining padding, margins, decoration, and constraints. SizedBox forces a specific width/height (or adds fixed spacing). Row lays children horizontally and Column lays them vertically, both controlled by mainAxisAlignment and crossAxisAlignment.
In Flutter, what is the difference between Expanded and Flexible inside a Row or Column?
Both distribute free space along the main axis by a flex factor. Expanded forces the child to fill all allotted space (flex fit = tight). Flexible allows the child to be at most that size but can be smaller (flex fit = loose). Expanded is Flexible with fit: FlexFit.tight.
In Flutter, how do Navigator.push and Navigator.pop manage screens?
Flutter uses a stack of Route objects. Navigator.push(context, MaterialPageRoute(...)) pushes a new screen onto the stack; Navigator.pop(context) removes the top route and returns to the previous one, optionally passing a result value back.
In Flutter, what is the difference between imperative (Navigator 1.0) and declarative (Navigator 2.0 / Router) navigation?
Navigator 1.0 is imperative: you call push/pop directly to mutate the stack. Navigator 2.0 (the Router API with Pages) is declarative: the entire navigation stack is derived from app state, enabling better deep linking and web URL synchronization. Packages like go_router wrap this.
In Flutter, how do you define and use named routes?
You register a map in MaterialApp's routes: parameter (e.g. '/details': (context) => DetailsScreen()) or use onGenerateRoute. Then navigate with Navigator.pushNamed(context, '/details'), optionally passing arguments via the arguments parameter.
In Flutter, how are assets like images declared and loaded?
Assets are declared under the flutter: assets: section of pubspec.yaml with their paths. They are loaded at runtime via widgets like Image.asset('path') or the rootBundle/AssetBundle APIs (e.g. rootBundle.loadString for text).
In Flutter, how do you add and use a custom font?
Declare the font family and its .ttf/.otf files (with weight/style) under flutter: fonts: in pubspec.yaml. Then apply it with TextStyle(fontFamily: 'MyFont'), or set it globally in ThemeData's textTheme.
In Flutter, how does resolution-aware asset selection work with directories like 2.0x and 3.0x?
Flutter looks for variants in subdirectories named by device pixel ratio (e.g. 2.0x/, 3.0x/) next to the main asset. At runtime it picks the variant matching the device's devicePixelRatio, so a $2.0\times$ screen loads the 2.0x image automatically.
In Flutter, what does setState() do and what are its limitations?
setState() notifies the framework that a State object's internal data changed, scheduling a rebuild of that widget's subtree. Limitations: it only rebuilds locally, does not scale for sharing state across distant widgets, and calling it after dispose or during build causes errors.
In Flutter, what is an InheritedWidget and what problem does it solve?
InheritedWidget efficiently propagates data down the tree so descendants can access it via context.dependOnInheritedWidgetOfExactType() without passing it manually through constructors (avoiding "prop drilling"). Dependent widgets rebuild automatically when the InheritedWidget's data changes. Theme and MediaQuery use it internally.
In Flutter, how does an InheritedWidget decide whether dependent widgets should rebuild?
By overriding updateShouldNotify(oldWidget), which returns a bool. If it returns true when the new data differs from the old, all registered dependents are rebuilt; if false, they are not notified. This gives fine-grained control over rebuild propagation.
What is the Provider package in Flutter, and how does it relate to InheritedWidget?
Provider is a wrapper around InheritedWidget that simplifies dependency injection and state management. You expose values with providers (Provider, ChangeNotifierProvider) and consume them via context.watch/read or Consumer, avoiding boilerplate while getting scoped, rebuild-efficient access.
In Flutter's Provider, what is the difference between context.watch, context.read, and context.select?
context.watch<T>() subscribes and rebuilds the widget when T changes. context.read<T>() gets the value once without listening (use in callbacks). context.select<T,R>() listens to only a specific derived value R, rebuilding only when that slice changes for finer performance control.
What is Riverpod, and what advantages does it claim over Provider?
Riverpod is a rewrite of Provider that is compile-safe and does not depend on the widget tree/BuildContext. Advantages: providers are global and testable, no ProviderNotFoundException at runtime, supports multiple providers of the same type, and offers auto-dispose and family modifiers.
In Riverpod, what are the main provider types (Provider, StateProvider, FutureProvider, NotifierProvider)?
Provider exposes a read-only/computed value. StateProvider holds simple mutable state. FutureProvider (and StreamProvider) expose async data as AsyncValue. NotifierProvider/AsyncNotifierProvider expose complex mutable state managed by a Notifier class with methods.
Planning Cross-Platform Development for Mobile App Development
Cross-Platform Development is about 14% of the Mobile App Development syllabus by topic count — 20 of 138 topics, spread over 6 chapters. At roughly 45 minutes per topic plus 12 minutes per sub-topic, a first pass runs to about 15 hours.
The heaviest chapters are Flutter Fundamentals (4 topics), React Native Fundamentals (4 topics), Flutter State Management (3 topics) . Front-load those while your energy is high; the short chapters are better revision filler later.
Work top-down: read the chapter, then tick topics off individually rather than marking the whole chapter done. Sub-topics are where silent gaps hide.
Cross-Platform Development (Mobile App Development) FAQ
What is in the Mobile App Development Cross-Platform Development syllabus?
Cross-Platform Development is split into 6 chapters — Flutter Fundamentals, Flutter State Management, React Native Fundamentals, React Native State and Data, Native Modules and Bridges and Cross-Platform Trade-offs, containing 20 topics and 0 sub-topics in total.
How many chapters are there in Cross-Platform Development for Mobile App Development?
6 chapters. Cross-Platform Development accounts for about 14% of the topics in the whole Mobile App Development syllabus (20 of 138).
How long should I spend on Cross-Platform Development for Mobile App Development?
Budget around 15 hours for a first pass through Cross-Platform Development — about 45 minutes per topic plus 12 minutes per sub-topic across its 20 topics. Add revision cycles on top.
Are there flashcards for Mobile App Development Cross-Platform Development?
Yes — a 64-card Cross-Platform Development deck. Sample cards are printed on this page, and the full deck is free in the Examius app with spaced repetition scheduling.