10 astuces avec Flutter

10 astuces flutter by Coding Team

Salut les geeks ! Aujourd'hui, on va se faire un festin d'astuces Flutter qui vont vous transformer en véritable ninja du code. Préparez-vous à en prendre plein les mirettes, ça va être du lourd !

1. Afficher un pdf

Fini la galère pour afficher des PDF dans vos apps ! Avec la lib advance_pdf_viewer, c'est aussi simple que de faire cuire des pâtes (bon, peut-être un poil plus compliqué, mais vous voyez l'idée).

  • Commencez par ajouter la dépendance dans votre pubspec.yaml : dependencies: advance_pdf_viewer: ^1.2.2
  • Ensuite, dans votre code, c'est parti mon kiki :
  • import 'package:advance_pdf_viewer/advance_pdf_viewer.dart';
    
    // Dans votre widget StatefulWidget
    PDFDocument document;
    
    @override
    void initState() {
      super.initState();
      loadDocument();
    }
    
    loadDocument() async {
      document = await PDFDocument.fromAsset('assets/tuto_codingteam.pdf');
      setState(() {});
    }
    
    // Dans votre méthode build
    PDFViewer(
      document: document,
      zoomSteps: 1,
      //uncomment below line to preload all pages
      // lazyLoad: false,
      // uncomment below line to scroll vertically
      // scrollDirection: Axis.vertical,
    )
           

    Et bim ! Votre PDF s'affiche comme par magie. Vous pouvez même charger des PDF depuis une URL ou un fichier local. C'est pas beau ça ?

    2. Génération de fichier

    Marre de taper du code comme un bourrin pour créer vos fichiers de base ? L'extension VS Code "Flutter Files" va vous faire gagner un temps fou !

  • 1. Installez l'extension "Flutter Files" dans VS Code
  • 2. Clic droit sur un dossier dans votre projet
  • 3. Sélectionnez "Flutter Files: New Screens"
  • 4. Entrez le nom de votre écran
  • 5. Choisissez les fichiers à générer (view, controller, model, etc.)
  • Et hop ! Vos fichiers sont créés avec la structure de base. Plus besoin de copier-coller comme un sagouin !

    3. Thèmes aux petits oignons

    Vous en avez marre des widgets tout moches ? Customisez-les à la volée avec un petit Theme bien placé :

    
    Theme(
      data: ThemeData(
        inputDecorationTheme: InputDecorationTheme(
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(20),
          ),
          filled: true,
          fillColor: Colors.grey[200],
        ),
        elevatedButtonTheme: ElevatedButtonThemeData(
          style: ElevatedButton.styleFrom(
            primary: Colors.orange,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(10),
            ),
          ),
        ),
      ),
      child: Column(
        children: [
          TextField(
            decoration: InputDecoration(
              hintText: 'Entrez votre texte ici',
            ),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {},
            child: Text('Bouton stylé'),
          ),
        ],
      ),
    )
            

    Et voilà ! Des widgets tout beaux, tout propres, sans avoir à répéter le style partout. C'est pas la classe ça ?

    4. Debug de ouf avec debugPrint()

    Oubliez le vieux print() qui tronque vos logs comme un boucher. Utilisez debugPrint() pour afficher des tonnes de data sans broncher :

    
    // Au lieu de ça
    print('Ma super longue chaîne de caractères qui va être tronquée...');
    
    // Faites ça
    debugPrint('Ma super longue chaîne de caractères qui s\'affiche en entier, même si elle fait 3 km de long !');
            

    debugPrint() gère automatiquement les lignes trop longues en les découpant proprement. Plus besoin de vous arracher les cheveux pour lire vos logs !

    5. Fonctionnalité de partage

  • Ajoutez le package share_plus et BAM ! Vos users peuvent partager du contenu en moins de temps qu'il n'en faut pour dire "Flutter" :
  • D'abord, ajoutez la dépendance: dependencies:
    share_plus: ^4.0.10
  • Ensuite, dans votre code :

    
    import 'package:share_plus/share_plus.dart';
    
    // Pour partager du texte
    Share.share('Mate ce tuto de ouf sur Coding Team!');
    
    // Pour partager un fichier
    final result = await Share.shareFiles(
      ['${directory.path}/image.jpg'],
      text: 'Check cette image de ouf !',
      subject: 'Image cool'
    );
    
    if (result.status == ShareResultStatus.success) {
      print('Partage réussi !');
    }
            

    Et voilà ! Vos users peuvent partager des textes, des images, des fichiers... Bref, tout ce que vous voulez !

    6. Icônes adaptatives

    Créez des icônes adaptatives qui déchirent en un rien de temps :

    1. Allez sur Adapticon
    2. Uploadez votre image de base (idéalement 1024x1024px)
    3. Ajustez le foreground et le background
    4. Téléchargez les fichiers générés
    5. Placez-les dans votre projet Flutter (par exemple dans assets/launcher/)
    6. Modifiez votre pubspec.yaml :
    
    dev_dependencies:
      flutter_launcher_icons: "^0.9.2"
    
    flutter_icons:
      android: true
      ios: true
      image_path_android: "assets/launcher/icon.png"
      image_path_ios: "assets/launcher/icon.png"
      adaptive_icon_background: "assets/launcher/background.png"
      adaptive_icon_foreground: "assets/launcher/foreground.png"
            

    Enfin, lancez la commande :

    flutter pub run flutter_launcher_icons:main

    Et voilà ! Des icônes qui claquent sur tous les devices. Apple et Google n'ont qu'à bien se tenir !

    7. Mode Performance Overlay de la mort

    Vous voulez savoir si votre app tourne comme une Ferrari ou comme un tracteur ? Activez le mode expert pour traquer les perfs :

    
    MaterialApp(
      showPerformanceOverlay: true,
      // ... le reste de votre configuration
    )
            

    Vous verrez apparaître deux graphiques en haut de votre app :

    • Le graphique du haut (GPU) : montre le temps pris pour rendre chaque frame
    • Le graphique du bas (UI) : montre le temps pris par le code Dart pour construire chaque frame

    Si les barres dépassent la ligne horizontale, c'est que vous avez des soucis de perfs. À vous de jouer pour optimiser tout ça !

    8. Flashlight de compet'

    Ajoutez une fonction lampe torche à votre app en deux temps trois mouvements avec le package torch_light :

    D'abord, ajoutez la dépendance :

    dependencies:
      torch_light: ^1.0.0

    Ensuite, dans votre code :

    
    import 'package:torch_light/torch_light.dart';
    
    // Pour allumer la lampe
    try {
      await TorchLight.enableTorch();
    } on Exception catch (_) {
      // Gérez l'erreur (ex: pas de flash sur l'appareil)
    }
    
    // Pour éteindre la lampe
    try {
      await TorchLight.disableTorch();
    } on Exception catch (_) {
      // Gérez l'erreur
    }
    
    // Vérifiez si le flash est disponible
    bool isAvailable = await TorchLight.isTorchAvailable();
            

    Et bim ! Votre app peut maintenant servir de lampe torche. Pratique pour retrouver ses clés sous le canapé !

    9. Gestes aux p'tits oignons

    Détectez tous les gestes de vos users avec GestureDetector. C'est comme avoir des super-pouvoirs tactiles :

    GestureDetector(
      onTap: () => print("Tapé !"),
      onDoubleTap: () => print("Double tap !"),
      onLongPress: () => print("Appui long !"),
      onPanUpdate: (details) => print("Pan : ${details.delta}"),
      onScaleUpdate: (details) => print("Scale : ${details.scale}"),
      child: Container(
        width: 200,
        height: 200,
        color: Colors.blue,
        child: Center(child: Text('Touche-moi !', style: TextStyle(color: Colors.white))),
      ),
    )
            

    Avec ça, vous pouvez créer des interactions dignes des meilleurs jeux vidéo. Swipe, pinch, rotate... tout est possible !

    10. Pause comme un pro

    Besoin de mettre votre code en pause, façon Matrix ? Future.delayed() est là pour vous :

    Future<void> maFonctionAvecPause() async {
      print("Début de la fonction");
      
      await Future.delayed(Duration(seconds: 2));
      print("2 secondes plus tard...");
      
      await Future.delayed(Duration(milliseconds: 500));
      print("Et encore 500 millisecondes après !");
    }
    
    // Utilisation
    maFonctionAvecPause();
            

    C'est super utile pour :

    • Simuler des chargements (pour tester vos écrans de loading)
    • Créer des animations séquentielles
    • Déboguer des problèmes de timing
    • Faire patienter vos users comme un chef

    Conclusion

    Voilà les ninjas ! Avec ces 10 astuces de la mort, vous allez coder du Flutter comme jamais. Vos apps vont être plus stylées qu'un défilé de mode, plus rapides qu'Usain Bolt, et plus smooth qu'un slow de Barry White.

    N'hésitez pas à partager vos propres tricks en commentaires. Et surtout, codez bien, mangez des pommes, et que la force de Dart soit avec vous !

    • A+
    • A-