10 astuces avec Flutter
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).
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 !
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
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 :
- Allez sur Adapticon
- Uploadez votre image de base (idéalement 1024x1024px)
- Ajustez le foreground et le background
- Téléchargez les fichiers générés
- Placez-les dans votre projet Flutter (par exemple dans assets/launcher/)
- 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 !
5 commentaires