flutter/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.

Qu'est-ce que flutter-building-plugins ?

Ce skill automatise la création de plugins Flutter, permettant aux développeurs de générer des packages réutilisables qui exposent des fonctionnalités natives (Android, iOS, web, etc.) à travers une interface Dart unifiée. Il est particulièrement utile pour les développeurs travaillant avec des agents comme Claude Code, Cursor ou Codex qui souhaitent intégrer des API matérielles (appareil photo, Bluetooth) ou des SDK tiers sans écrire manuellement le code de pontage. Le skill génère la structure standard d'un plugin Flutter (dossiers `android`, `ios`, `lib`, `example`), configure le `pubspec.yaml` avec les dépendances nécessaires, et fournit les squelettes de code pour les méthodes d'interopérabilité sur chaque plateforme cible. Son fonctionnement s'appuie sur les modèles de plugin officiels de Flutter et les conventions de `MethodChannel` pour assurer une compatibilité maximale avec les applications hôtes.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flutter/skills/tree/main/skills/flutter-building-plugins

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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 pigeon pour 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_ ou mon_org_).
  • Documentez les méthodes publiques avec des commentaires Dartdoc.
  • Testez le plugin dans une application hôte distincte (dossier example/).

Ressources

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

flutter/flutter-accessibility

Configure your Flutter app to support assistive technologies like Screen Readers

flutter/flutter-accessibility-audit

Triggers an accessibility scan through the widget_inspector and automatically adds Semantics widgets or missing labels to the source code.

flutter/flutter-adding-home-screen-widgets

Adds home screen widgets to a Flutter app for Android and iOS. Use when providing glanceable app information or quick actions on the device home screen.

flutter/flutter-add-integration-test

Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests. Use when adding integration testing to a project, exploring UI components via MCP, or automating user flows with the integration_test package.

flutter/flutter-add-widget-preview

Adds interactive widget previews to the project using the previews.dart system. Use when creating new UI components or updating existing screens to ensure consistent design and interactive testing.

flutter/flutter-add-widget-test

Implement a component-level test using `WidgetTester` to verify UI rendering and user interactions (tapping, scrolling, entering text). Use when validating that a specific widget displays correct data and responds to events as expected.

flutter/flutter-animating-apps

Implements animated effects, transitions, and motion in a Flutter app. Use when adding visual feedback, shared element transitions, or physics-based animations.

flutter/flutter-animation

Add animated effects to your Flutter app

flutter/flutter-apply-architecture-best-practices

Architects a Flutter application using the recommended layered approach (UI, Logic, Data). Use when structuring a new project or refactoring for scalability.

flutter/flutter-app-size

Measure and reduce the size of the Flutter app bundle, APK, or IPA

flutter/flutter-architecting-apps

Architects a Flutter application using the recommended layered approach (UI, Logic, Data). Use when structuring a new project or refactoring for scalability.

flutter/flutter-architecture

Use the Flutter team's recommended app architecture

flutter/flutter-building-forms

Builds Flutter forms with validation and user input handling. Use when creating login screens, data entry forms, or any multi-field user input.

flutter/flutter-building-layouts

Builds Flutter layouts using the constraint system and layout widgets. Use when creating or refining the UI structure of a Flutter application.

flutter/flutter-build-responsive-layout

Use `LayoutBuilder`, `MediaQuery`, or `Expanded/Flexible` to create a layout that adapts to different screen sizes. Use when you need the UI to look good on both mobile and tablet/desktop form factors.

flutter/flutter-caching

Cache data in a Flutter app

flutter/flutter-caching-data

Implements caching strategies for Flutter apps to improve performance and offline support. Use when retaining app data locally to reduce network requests or speed up startup.

flutter/flutter-concurrency

Execute long-running tasks in a background thread in Flutter

flutter/flutter-databases

Work with databases in a Flutter app

flutter/flutter-embedding-native-views

Embeds native Android, iOS, or macOS views into a Flutter app. Use when integrating complex native components like maps or web views.

Skills associés