Cross-platform ontwikkeling is een van de meest dynamisch evoluerende gebieden van mobiele engineering. Volgens Statista (2025) gebruikt 42% van de mobiele ontwikkelaars Flutter of React Native in hun projecten. Platformkanalen, bruggen en native modules vormen de basis van cross-platform architectuur.
Belangrijkste punten
Flutter is Google's framework voor het maken van native applicaties vanuit één enkele Dart-codebase. Om te communiceren met platformcode (Kotlin, Swift) gebruikt Flutter Platform Channel. Het is een brug waarmee Dart-code native functies aanroept en het resultaat ontvangt. Cross-platform mobiele app-ontwikkeling met Flutter is het snelst groeiende segment van mobiele ontwikkeling in 2025–2026.
Method Channel is het belangrijkste communicatiekanaal Flutter <-> Native. Aan de Dart-kant: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). Het bericht wordt gecodeerd in StandardMethodCodec (binair). Aan de native kant wordt een MethodChannel geregistreerd en verwerkt de aanroep. MethodChannel is asynchroon — het resultaat wordt via Future geretourneerd. Alternatief: EventChannel voor gebeurtenisstromen.
BasicMessageChannel is een lager niveau kanaal voor het verzenden van strings/bytes zonder "methode-argumenten" structuur. Gebruikt voor aangepaste protocollen. De hele Platform Channel API gaat door de Flutter Engine, die berichten serialiseert/deserialiseert.
dart:ffi (Foreign Function Interface) — directe aanroep van C-functies vanuit Dart zonder platformkanalen. FFI is sneller dan Method Channel (0 serialisatie overhead). Gebruikt voor prestatie-intensieve bewerkingen: audioverwerking, cryptografie, grafische engines. Skia is de render engine van Flutter (2D graphics). Impeller is de nieuwe render engine van Flutter die Skia vervangt. Impeller compileert shaders vooraf (Ahead-of-Time), waardoor jank (frame haperingen) bij eerste opstarten wordt geëlimineerd. Bij IT Sectr zijn we in 2025 overgestapt op Impeller — het verschil in animatievloeiendheid is direct merkbaar.
React Native is Meta's framework voor cross-platform mobiele app-ontwikkeling in JavaScript/TypeScript. React Native rendert componenten naar native UI-elementen. De architectuur is geëvolueerd: oude Bridge → nieuwe Fabric met JSI.
Bridge is de oude React Native architectuur. De JS-thread serialiseert berichten naar JSON en stuurt ze via een asynchrone wachtrij naar de native thread. Dit veroorzaakt vertragingen (bridge round-trip ~1 ms). Fabric is de nieuwe architectuur waarbij JS- en native UI-threads synchroon communiceren via JSI (JavaScript Interface). Fabric injecteert native views direct, zonder brug. Fabric is een belangrijke mijlpaal in cross-platform ontwikkeling en versnelt rendering tot 2x.
JSI (JavaScript Interface) is een C++ API die JavaScript in staat stelt om direct native functies aan te roepen en geheugen te delen. JSI heeft de JSON-serialisatie van Bridge vervangen. De nieuwe JSI-gebaseerde architectuur is een cruciale prestatie in cross-platform ontwikkeling en bepaalt de prestaties van mobiele apps. Turbo Module is een nieuwe manier om native modules voor React Native te schrijven. In tegenstelling tot oude Native Modules wordt Turbo Module lui geladen en gebruikt JSI.
Hermes is een JavaScript-engine van Meta, geoptimaliseerd voor React Native. Hermes compileert JS-code naar bytecode tijdens de build, waardoor het opstarten van mobiele apps wordt versneld en het geheugengebruik bij cross-platform ontwikkeling wordt verminderd. Codegen is een native code generator op basis van TypeScript-types. Codegen maakt automatisch native modules en JSI-bindingen aan, waardoor handmatig werk wordt verminderd.
| Parameter | Flutter | React Native | KMP |
|---|---|---|---|
| Taal | Dart | JavaScript/TypeScript | Kotlin |
| Architectuur | Skia/Impeller (eigen render) | Fabric + JSI (native UI) | Native SDK (elke module) |
| Native brug | MethodChannel (Dart ↔ Native) | JSI (JS ↔ C++ ↔ Native) | expect/actual (Kotlin ↔ Native) |
| UI | Eigen (Skia/Impeller) | Native componenten (UIKit/Android Views) | Native UI (Jetpack Compose, SwiftUI) |
| Render engine | Skia of Impeller | Native (UIView/View) | Native |
Flutter rendert alles zelf via Skia/Impeller — dit geeft een uniforme UI op beide platforms. React Native gebruikt native UI-componenten — het ziet eruit als een native app. KMP handelt geen UI af — het deelt alleen bedrijfslogica, de UI blijft native. De keuze hangt af van de prioriteit: uniforme UI (Flutter) of maximale nativeheid (React Native/KMP).
Kotlin Multiplatform (KMP) is JetBrains-technologie voor gedeelde code tussen Android en iOS. In tegenstelling tot Flutter en React Native is KMP een alternatieve benadering van cross-platform ontwikkeling: het vervangt de UI niet, maar deelt bedrijfslogica, netwerkverzoeken, datamodellen en repositories. De UI blijft native: Jetpack Compose voor Android, SwiftUI voor iOS.
expect — declaratie van een functie of klasse in de gemeenschappelijke module (commonMain) die een platformimplementatie heeft. Cross-platform ontwikkeling met KMP gebruikt expect/actual: actual is de concrete implementatie voor elk platform (androidMain, iosMain). Voorbeeld: expect fun getDeviceId(): String — actual op Android gebruikt Settings.Secure, op iOS — UIDevice.current.identifierForVendor.
Kotlin/Native — een Kotlin-compiler naar native binary (iOS framework). Hiermee kan Kotlin-code op iOS worden uitgevoerd zonder JVM. Kotlin/Native gebruikt LLVM voor compilatie en biedt prestaties dicht bij Swift. Kotlin/JS — compilatie van Kotlin naar JavaScript voor web- en React Native-projecten.
Build tools van cross-platform mobiele app-ontwikkeling — de brug tussen code en uiteindelijke binary. Gradle KTS beheert het Android-gedeelte, CocoaPods Plugin beheert de KMP iOS-afhankelijkheden, XCFramework beheert de distributie van native bibliotheken.
Gradle KTS — Gradle-configuratie met Kotlin DSL in plaats van Groovy. KTS ondersteunt automatisch aanvullen in Android Studio, typecontrole en refactoring-veiligheid. Voorbeeld: plugins { id("com.android.application") } in plaats van apply plugin: 'com.android.application'. Aanbevolen voor alle nieuwe projecten.
CocoaPods Plugin — een Gradle-plugin voor KMP die de gedeelde module publiceert als een CocoaPods pod. Een iOS-ontwikkelaar voegt deze toe via Podfile. XCFramework — Apple's formaat voor distributie van binaire bibliotheken. XCFramework bevat binaries voor meerdere architecturen (arm64, x86_64) en platforms (iOS, macOS, watchOS). In KMP wordt de gedeelde module geëxporteerd als XCFramework voor iOS.
Veelgestelde vragen
Flutter biedt betere prestaties (Skia/Impeller), een uniforme UI-codebase en hoge stabiliteit in cross-platform ontwikkeling. React Native — enorme community, gemakkelijke overgang van webontwikkeling en flexibiliteit via JSI. IT Sectr beveelt Flutter aan voor UI-gerichte projecten, React Native als het project veel native code vereist.
Flutter stuurt een bericht via MethodChannel aan de Dart-kant. Het bericht wordt gecodeerd naar binair formaat en verzonden naar de native kant (Kotlin/Swift), waar het wordt verwerkt en het resultaat retourneert. Alle communicatie in mobiele app-ontwikkeling is asynchroon.
expect is een declaratie van een functie of klasse in de gemeenschappelijke code die een platformimplementatie heeft. actual is de concrete implementatie voor elk platform (Android/iOS). Dit is KMP's mechanisme voor voorwaardelijke compilatie zonder preprocessor.
Bridge is de oude architectuur waarbij berichten naar JSON worden geserialiseerd en asynchroon via een wachtrij worden verzonden. Fabric is de nieuwe architectuur met synchrone native functieaanroepen via JSI, waardoor vertragingen worden geëlimineerd en de prestaties van mobiele apps worden verbeterd.
Hermes is een JavaScript-engine van Meta, geoptimaliseerd voor React Native. Het compileert JS naar bytecode tijdens de build, waardoor het opstarten van de app 2–3 keer wordt versneld en het geheugengebruik wordt verminderd.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.