Que fait flutter-building-plugins ?
Construit des plugins Flutter qui assurent une interopérabilité native pour d'autres applications. À utiliser lors de la création de packages réutilisables faisant le pont entre Flutter et des fonctionnalités spécifiques à une plateforme.
Pourquoi ce skill est utile
- Gain de temps : Automatise la configuration fastidieuse des plugins multiplateformes (Android, iOS, web).
- Cohérence : Suit les bonnes pratiques officielles de Flutter (MethodChannel, Pigeon, FFI).
- Maintenabilité : Génère une structure de code claire et bien organisée, facile à étendre.
- Flexibilité : Supporte les plugins Fed (Federated), avec séparation entre le package principal et les implémentations par plateforme.
Fonctionnalités principales
- Initialisation d'un plugin Flutter avec
flutter create --template=plugin - Génération automatique des fichiers de pontage (MethodChannel, EventChannel, BasicMessageChannel)
- Configuration des permissions natives (AndroidManifest, Info.plist, etc.)
- Support des plugins fédérés (plusieurs packages par plateforme)
- Intégration des tests unitaires et widget
Prérequis
- Flutter SDK installé (version 3.10+ recommandée)
- Un environnement de développement configuré pour Android et/ou iOS
- Les outils de ligne de commande Flutter accessibles (
flutter,dart)
Utilisation
Créer un nouveau plugin
flutter create --template=plugin --platforms=android,ios mon_plugin
Ajouter une méthode de pontage
// lib/mon_plugin.dart
import 'dart:async';
import 'package:flutter/services.dart';
class MonPlugin {
static const channel = MethodChannel('com.example.mon_plugin');
static Future<String?> getPlatformVersion() async {
final version = await channel.invokeMethod('getPlatformVersion');
return version;
}
}
Implémenter la partie native (Android)
// android/src/main/kotlin/com/example/mon_plugin/MonPlugin.kt
package com.example.mon_plugin
import android.os.Build
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
class MonPlugin: FlutterPlugin, MethodChannel.MethodCallHandler {
private lateinit var channel : MethodChannel
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "com.example.mon_plugin")
channel.setMethodCallHandler(this)
}
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
if (call.method == "getPlatformVersion") {
result.success("Android ${Build.VERSION.RELEASE}")
} else {
result.notImplemented()
}
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
}
Bonnes pratiques
- Utilisez
pigeonpour générer automatiquement le code de pontage à partir d'un schéma Dart. - Nommez vos plugins de manière descriptive et cohérente (préfixe du propriétaire, e.g.
flutter_oumon_org_). - Documentez les méthodes publiques avec des commentaires Dartdoc.
- Testez le plugin dans une application hôte distincte (dossier
example/).
Ressources
- Documentation officielle des plugins Flutter
- Package pigeon pour la génération de code de pontage
- Guide des plugins fédérés