Phone
Intermediaire 10 questions Dart/Flutter

Questions d'entretien Flutter

Preparez votre entretien Flutter avec des questions sur les widgets, la gestion d'etat et le rendu.

Questions d'entretien Flutter

1. Comment fonctionne le rendu dans Flutter ?

Flutter n'utilise pas les composants natifs de la plateforme. Il dispose de son propre moteur de rendu (Skia/Impeller) qui dessine chaque pixel a l'ecran. L'architecture en trois couches : Framework (Dart, widgets, Material/Cupertino), Engine (C++, Skia, gestion des textes, compilation Dart), Embedder (specifique a la plateforme). Cette approche garantit une coherence visuelle parfaite entre iOS et Android et des performances proches du natif (60/120 fps).

2. Quelle est la difference entre StatelessWidget et StatefulWidget ?

Un StatelessWidget est un widget immutable qui ne change jamais apres sa construction. Il est reconstruit uniquement quand ses parametres changent depuis le parent. Un StatefulWidget possede un objet State mutable qui persiste entre les reconstructions. Appelez setState() pour notifier Flutter qu'un rebuild est necessaire. Preferez StatelessWidget quand possible pour de meilleures performances.

3. Expliquez le widget tree, element tree et render tree.

Flutter utilise trois arbres : le Widget tree (description declarative de l'UI, immutable, reconstruit frequemment), l'Element tree (instanciation des widgets, gere le cycle de vie, persiste entre les rebuilds), et le Render tree (calcule le layout et peint les pixels). Quand setState() est appele, Flutter reconstruit le widget tree, compare avec l'element tree (reconciliation), et ne met a jour que les render objects affectes. C'est similaire au virtual DOM de React.

4. Quelles sont les principales solutions de gestion d'etat en Flutter ?

setState : pour l'etat local simple. Provider : le plus populaire, injection de dependances reactive (ChangeNotifier + Consumer). Riverpod : evolution de Provider, compile-time safe, plus flexible. BLoC (Business Logic Component) : separe la logique avec des Streams, patron evenementiel. GetX : tout-en-un (etat, navigation, DI), simple mais opinionne. Redux : pour les developpeurs venant du web. Choix recommande : Provider pour les projets simples, Riverpod ou BLoC pour les projets complexes.

5. Comment fonctionne la navigation dans Flutter ?

Deux approches : Navigator 1.0 (imperatif) avec push/pop sur une pile de routes (Navigator.push, Navigator.pop). Navigator 2.0 / Router (declaratif) pour les applications complexes (deep linking, web). Packages populaires : go_router (simplifie le Navigator 2.0 avec une syntaxe declarative), auto_route (genere le code de routing). La navigation gere le back stack, les arguments entre routes, les animations de transition et les deep links.

6. Comment appeler du code natif depuis Flutter ?

Platform Channels : le mecanisme officiel. MethodChannel pour les appels de methodes, EventChannel pour les streams. Le code Dart envoie un message au code natif (Swift/Kotlin) via un canal nomme, et recoit une reponse. FFI (Foreign Function Interface) : pour appeler du code C/C++ directement depuis Dart, plus performant. Pigeon : generateur de code qui cree les interfaces type-safe entre Dart et le code natif automatiquement.

7. Comment optimiser les performances d'une application Flutter ?

Techniques : utilisez const constructors pour les widgets statiques (evite les rebuilds inutiles), evitez les rebuilds excessifs (granularisez les widgets, utilisez Consumer/Selector avec Provider), utilisez ListView.builder pour les longues listes (lazy loading), cachez les images avec CachedNetworkImage, utilisez le DevTools Performance view pour identifier les jank frames, et preferez Impeller (nouveau moteur de rendu) sur iOS.

8. Expliquez le pattern BLoC et son implementation.

Le pattern BLoC (Business Logic Component) separe la logique metier de l'UI en utilisant des Streams. Le BLoC recoit des Events (actions de l'utilisateur), traite la logique et emet des States (etats de l'UI). Avec le package flutter_bloc : definissez un Event (sealed class), un State (sealed class), et un Bloc qui mappe les events aux states via on. L'UI utilise BlocBuilder pour reagir aux changements d'etat et BlocProvider pour l'injection.

9. Comment gerer la persistance des donnees dans Flutter ?

shared_preferences : paires cle-valeur simples (preferences). sqflite : SQLite pour les donnees structurees. Hive : base de donnees NoSQL legere et rapide (boites de donnees typees). Drift (anciennement Moor) : ORM SQLite reactif avec des requetes type-safe. Isar : base de donnees NoSQL hautes performances. Firebase Firestore : base de donnees cloud temps reel. Pour le stockage securise : flutter_secure_storage (Keychain iOS, Keystore Android).

10. Comment tester une application Flutter ?

Trois niveaux de tests : Tests unitaires (test de logique pure, BLoCs, repositories), Widget tests (testent un widget en isolation avec testWidgets(), pumpWidget(), find.byType(), expect()), Integration tests (testent l'application complete sur un appareil/emulateur). Utilisez mockito pour les mocks, bloc_test pour tester les BLoCs (blocTest()), et golden tests pour la comparaison visuelle pixel-par-pixel des widgets.

Besoin d'aide pour preparer vos entretiens ?

Decrivez votre profil pour des conseils de preparation personnalises.

Recevoir des conseils

Questions frequentes

Flutter ou React Native, lequel choisir ?
Flutter pour des performances proches du natif, une coherence visuelle parfaite et un ecosysteme Google. React Native si votre equipe maitrise React/JavaScript et que vous voulez un ecosysteme plus large. Flutter gagne en popularite mais React Native a plus d'offres d'emploi en France.
Flutter est-il adapte pour le web et le desktop ?
Flutter Web est utilisable pour les applications web (pas pour les sites SEO). Flutter Desktop (Windows, macOS, Linux) est stable mais l'ecosysteme de packages desktop est encore en maturation. Le mobile reste le point fort de Flutter.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.