YMHB WEB

Flutter ou développement natif en Swift et Kotlin : quand une seule base de code suffit

Flutter suffit pour une application de gestion, de service ou de marketplace : une seule base de code produit l'application iOS et l'application Android, et le code natif reste accessible par des plugins ou des canaux de plateforme. Le développement natif en Swift et Kotlin s'impose quand l'application dépend d'un SDK matériel propriétaire, vise une seule plateforme ou vit surtout dans des extensions système.

L'essentiel

  • Flutter compile une seule base de code Dart en code machine pour iOS et Android et dessine lui-même son interface, sans utiliser les composants du système.
  • Flutter accède aux fonctions natives par des plugins, par des canaux de plateforme vers Swift et Kotlin, ou par Dart FFI pour les bibliothèques en C.
  • Le natif s'impose pour un SDK matériel propriétaire, une application destinée à une seule plateforme ou des extensions système qui portent l'essentiel de l'usage.
  • La documentation de Flutter réserve l'affichage de vues natives dans une interface Flutter aux composants complexes, comme une carte Google Maps, à cause de son surcoût.
  • YMHB Web a fait les deux choix : Flutter pour la marketplace Cospo Line, Kotlin natif pour le robot de livraison de Sakura France Service.

Flutter ou natif : le tableau comparatif

Le développement natif consiste à écrire l'application iOS en Swift, avec SwiftUI ou UIKit, et l'application Android en Kotlin, avec les outils d'Apple et de Google. Flutter, framework open source géré par Google et publié sous licence BSD 3-Clause, produit les deux applications à partir d'une seule base de code écrite en Dart.

CritèreFlutterNatif (Swift et Kotlin)
Bases de codeUne seule, en Dart, pour iOS et AndroidDeux, une par système
InterfaceComposants redessinés par Flutter, identiques sur toutes les versions du systèmeComposants du système, qui suivent ses évolutions visuelles
Nouvelles API du systèmeUtilisables dès leur sortie, en écrivant le pont natif si aucun plugin n'existeUtilisables directement
Extensions système (widgets, extension de partage)Possibles, avec du code natif en complémentNatives par construction
Versions minimalesiOS 15 et API Android 24 pour la version actuelle de FlutterFixées par le projet, dans les limites des outils d'Apple et de Google
CompétencesUn profil Dart, avec des notions natives pour les cas particuliersUn profil iOS et un profil Android
Effort de développementUne base à écrire et à testerDeux bases à écrire, tester et maintenir
Autres ciblesWeb, Windows, macOS et Linux avec la même basePropres à chaque plateforme

Comment Flutter accède-t-il aux fonctions natives du téléphone ?

Flutter accède aux fonctions du téléphone par trois mécanismes documentés : les plugins, les canaux de plateforme et l'interopérabilité directe.

  1. Les plugins : des paquets publiés sur pub.dev qui enveloppent une API native. La documentation de Flutter associe par exemple StoreKit (achats intégrés) au plugin in_app_purchase, CoreLocation au plugin geolocator, HealthKit au plugin health et WidgetKit au plugin home_widget.
  2. Les canaux de plateforme : quand aucun plugin ne convient, le code Dart envoie des messages asynchrones à du code écrit en Kotlin ou Java sur Android, en Swift ou Objective-C sur iOS. Le paquet Pigeon génère ce code de liaison de façon typée, sans correspondances de chaînes de caractères à maintenir à la main.
  3. L'interopérabilité directe : Dart FFI appelle des bibliothèques en C, et les outils jnigen et ffigen génèrent les liaisons vers Java, Kotlin, Objective-C ou Swift. Selon la documentation de Flutter, FFI peut être nettement plus rapide que les canaux de plateforme, faute de sérialisation des données.

La documentation Android de Flutter l'affirme sans détour : une application Flutter sur Android peut utiliser les dernières API dès le jour de leur sortie. La vraie question n'est donc pas « est-ce possible ? » mais « combien de code natif faudra-t-il écrire et maintenir à côté ? ».

Dans quels cas le développement natif s'impose-t-il ?

Le natif s'impose quand le code propre à la plateforme devient le cœur de l'application au lieu d'une exception.

  • Un SDK matériel propriétaire : un robot, un terminal de paiement ou un lecteur industriel livré avec un SDK Android ou iOS. Envelopper tout le SDK dans des canaux revient à écrire l'application deux fois.
  • Une seule plateforme : une application qui tourne sur un appareil Android dédié, ou uniquement sur iPad, ne tire aucun profit du multiplateforme.
  • Des extensions système au premier plan : si l'essentiel de l'usage se passe dans un widget d'écran d'accueil ou une extension de partage, l'application principale devient secondaire. Flutter sait afficher son interface dans certaines extensions iOS, mais sa documentation rappelle que leur mémoire est limitée et conseille de ne le faire que si l'extension dispose d'au moins 100 Mo.
  • Beaucoup de vues natives imbriquées : Flutter peut afficher une vue native, comme une carte, au milieu de son interface, mais sa documentation signale un surcoût de synchronisation et réserve cette technique aux composants complexes comme Google Maps. Sur Android, le mode de composition hybride peut faire baisser la fluidité de l'interface Flutter.
  • Suivre au plus près le design du système : Selon sa documentation, une application Flutter garde la même apparence sur toutes les versions du système, même quand celui-ci change ses propres composants. C'est un atout pour respecter une charte graphique, une contrainte si vous voulez adopter immédiatement chaque évolution visuelle d'iOS ou d'Android.

Coûts et maintenance : une base de code ou deux ?

À fonctionnalités égales, deux applications natives demandent d'écrire, de tester et de maintenir deux fois la logique d'interface, avec deux compétences distinctes. Flutter mutualise ce travail : une correction ou une nouvelle fonction se développe une fois et part sur les deux stores.

Le multiplateforme a aussi des coûts propres, à regarder en face :

  • la dépendance à des plugins tiers, parfois maintenus par des contributeurs indépendants : chaque plugin critique mérite une vérification de son activité avant d'être retenu ;
  • le code natif d'appoint (canaux, extensions), qui demande malgré tout des notions de Swift et de Kotlin ;
  • les montées de version de Flutter, à suivre en plus de celles des outils d'Apple et de Google.

Les deux approches vieillissent. La version actuelle de Flutter ne prend plus en charge iOS 14 et les versions antérieures, ni Android en dessous du niveau d'API 24 : si votre parc compte des téléphones anciens, vérifiez ces seuils avant de choisir. Le budget dépend surtout du périmètre fonctionnel, et le baromètre des prix 2026 donne les ordres de grandeur du marché.

Le cas mixte : Flutter et code natif dans la même application

Flutter et le natif peuvent cohabiter dans la même application, dans les deux sens.

  • Une application Flutter avec des modules natifs : l'essentiel des écrans en Flutter, et quelques modules en Swift ou en Kotlin derrière des canaux de plateforme, pour un SDK ou une fonction pointue.
  • Une application native avec des écrans Flutter : la fonction add-to-app intègre un module Flutter dans une application Android ou iOS existante, pour un parcours ou un écran, le reste conservant sa technologie d'origine. La documentation précise qu'une application mobile ne peut embarquer qu'une seule bibliothèque Flutter, et recommande d'initialiser le moteur à l'avance, son démarrage prenant un court instant.

Ce second schéma intéresse une entreprise qui possède déjà une application native et veut développer les nouvelles fonctions une seule fois, sans tout réécrire. La page moderniser un logiciel ancien sans tout casser applique la même logique de remplacement progressif.

Notre verdict selon votre situation

Votre situationChoix recommandé
Application de gestion, de service ou marketplace sur iOS et AndroidFlutter
Application terrain avec photos, signatures et hors connexionFlutter, avec une base locale et une synchronisation soignées
Appareil Android dédié avec le SDK d'un constructeurNatif Kotlin
Application uniquement iPhone ou iPad, très liée aux services d'AppleNatif Swift
Application native existante qui fonctionneLa garder, et ajouter des écrans Flutter si les deux plateformes évoluent ensemble
Équipe interne déjà experte en JavaScript et ReactReact Native, voir le comparatif Flutter ou React Native
Usage surtout au bureau, ponctuel sur téléphonePas d'application mobile : une application web

Quand ni Flutter ni le natif ne conviennent

Si l'outil sert surtout au bureau, si ses utilisateurs sont des clients occasionnels ou si le besoin n'exige ni hors connexion ni matériel, une application mobile n'est peut-être pas nécessaire. Une application web, éventuellement installable sur l'écran d'accueil, se diffuse par un lien et se met à jour sans passer par les stores : le comparatif PWA ou application native détaille ce qu'elle permet sur iPhone. Et si une application du marché couvre déjà le besoin, la redévelopper, en Flutter comme en natif, n'a pas de sens.

Deux projets, deux choix chez YMHB Web

Pour la marketplace Cospo Line, YMHB Web a retenu Flutter : une application mobile Flutter (recherche, réservation, messagerie, abonnements, notifications push) et un site Next.js à parité de fonctions, sur une base Supabase commune.

Le robot de livraison de Sakura France Service a suivi le chemin inverse. Son application embarquée est une application Android construite sur le SDK RobotOS du constructeur OrionStar : elle est écrite en Kotlin avec Jetpack Compose, et le tableau de bord que le robot sert lui-même sur le réseau du cabinet est en React. Une base multiplateforme n'aurait rien apporté à un appareil unique. Comme sur tous ses projets, YMHB Web dépose le code chez le client, documenté et écrit en technologies standard ; il lui appartient au paiement intégral.

Questions fréquentes

Flutter peut-il accéder au Bluetooth, au GPS ou aux capteurs du téléphone ?
Oui. Flutter accède aux fonctions du téléphone par des plugins publiés sur pub.dev, par des canaux de plateforme qui appellent du code Kotlin ou Swift, ou par Dart FFI pour les bibliothèques en C. Sa documentation associe par exemple CoreLocation au plugin geolocator et CoreMotion au plugin sensors_plus. Quand aucun plugin ne couvre un matériel précis, on écrit soi-même le pont natif.
Une application Flutter est-elle moins performante qu'une application native ?
Pour une application de gestion ou de service, l'écart de performance n'est pas le critère décisif. Flutter compile son code en code machine pour les versions publiées et dessine son interface avec son propre moteur, Impeller, livré avec l'application. Les limites apparaissent dans des cas précis, comme l'affichage de nombreuses vues natives au milieu de l'interface Flutter, dont la documentation signale le surcoût.
Peut-on ajouter Flutter à une application native existante ?
Oui, grâce à la fonction add-to-app. Un module Flutter s'intègre dans une application Android ou iOS existante pour afficher un écran ou un parcours, le reste de l'application restant en Kotlin ou en Swift. Flutter ne permet pas d'embarquer plusieurs bibliothèques Flutter dans une même application mobile, et recommande d'initialiser son moteur à l'avance pour éviter un délai à l'ouverture du premier écran Flutter.
Flutter permet-il de créer un widget d'écran d'accueil ?
Oui, avec du code natif en complément. La documentation de Flutter associe WidgetKit, le framework d'Apple pour les widgets, au plugin home_widget, qui configure le widget et échange des données avec l'application. Pour d'autres extensions iOS, comme une extension de partage, Flutter peut afficher sa propre interface, mais conseille de ne le faire que si l'extension dispose d'au moins 100 Mo de mémoire.
Quelles versions d'iOS et d'Android Flutter prend-il en charge ?
Selon la documentation de Flutter consultée en octobre 2026, la version actuelle prend en charge iOS à partir de la version 15 et Android à partir du niveau d'API 24 ; iOS 14 et les niveaux d'API Android 23 et inférieurs ne sont plus pris en charge. Ces seuils évoluent avec les versions du framework : vérifiez-les avant de choisir si votre parc compte des téléphones anciens.

À lire aussi

Sources

  1. Flutter, FAQ (projet open source géré par Google, licence BSD 3-Clause, interopérabilité via canaux, jnigen, ffigen et FFI)
  2. Flutter, Architectural overview (rendu, compilation, FFI, vues natives, add-to-app)
  3. Flutter, Writing custom platform-specific code (canaux de plateforme, Pigeon)
  4. Flutter, Leverage Apple's system libraries (plugins par framework Apple)
  5. Flutter, Calling Jetpack APIs (accès aux API Android dès leur sortie)
  6. Flutter, Hosting native Android views (modes de composition et performances)
  7. Flutter, Adding iOS app extensions (limite de mémoire des extensions)
  8. Flutter, Add Flutter to an existing app (add-to-app, une seule bibliothèque Flutter par application mobile)
  9. Flutter, Add a Flutter screen to an Android app (temps de démarrage du moteur et préchauffage recommandé)
  10. Flutter, Supported deployment platforms (Flutter 3.47 : iOS 15 et plus, API Android 24 et plus), consulté en octobre 2026
  11. Apple, SwiftUI (framework d'interface d'Apple)

Décrivez-nous votre situation, pas une liste de fonctionnalités.

Nous commençons par comprendre votre métier. Si un outil du marché suffit, nous vous le dirons.

Décrire mon projetou appelez le 09 61 20 47 79