flutter/flutter-interopération-avec-apis-natives

Interopère avec les API natives des plateformes Android, iOS et Web. À utiliser pour accéder à des fonctionnalités spécifiques aux appareils non disponibles en Dart ou pour appeler du code natif existant.

Qu'est-ce que flutter-interopération-avec-apis-natives ?

Cette compétence permet aux développeurs Flutter de communiquer avec des API natives sur Android, iOS et le Web, comblant ainsi le fossé entre les capacités de Dart et les fonctionnalités spécifiques aux plateformes. Elle est essentielle pour accéder à des fonctionnalités matérielles comme les capteurs, la caméra ou le stockage local qui ne sont pas exposées par défaut dans le framework Flutter. La compétence prend en charge les plateformes mobiles et Web, en utilisant des mécanismes tels que MethodChannels pour Android/iOS et JavaScript Interop pour le Web. En suivant cette compétence, les développeurs peuvent intégrer du code natif existant (Java, Kotlin, Swift, Objective-C, JavaScript) de manière transparente dans leurs applications Flutter, sans perte de performances ni complexité excessive. Elle fournit des directives claires pour la gestion des erreurs, le transfert de données et les bonnes pratiques de déploiement multiplateforme.

Compatible avec~Claude Code~Codex CLI~Cursor
Part ofMobile
npx skills add https://github.com/flutter/skills/tree/main/skills/flutter-interoperating-with-native-apis

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-interopération-avec-apis-natives ?

Interopère avec les API natives des plateformes Android, iOS et Web. À utiliser pour accéder à des fonctionnalités spécifiques aux appareils non disponibles en Dart ou pour appeler du code natif existant.

Aperçu

Cette compétence couvre les techniques permettant d'interagir avec du code et des API spécifiques à la plateforme dans les applications Flutter. Elle est utile lorsque la bibliothèque standard Flutter ou les packages ne fournissent pas l'accès natif requis.

Plateformes prises en charge

  • Android : utiliser MethodChannel avec Kotlin ou Java.
  • iOS : utiliser MethodChannel avec Swift ou Objective-C.
  • Web : utiliser dart:js ou dart:js_util avec JavaScript/Dart interop.

Utilisation

1. Configurer le canal

Choisissez un nom de canal unique pour identifier votre canal de communication. Par exemple :

import 'package:flutter/services.dart';

static const platform = MethodChannel('com.example.myapp/channel');

2. Appeler une méthode native

Utilisez invokeMethod pour appeler une fonction spécifique dans le code natif.

Future<void> getBatteryLevel() async {
  try {
    final result = await platform.invokeMethod<int>('getBatteryLevel');
    print('Niveau de batterie : $result%');
  } on PlatformException catch (e) {
    print('Impossible d\'obtenir le niveau de batterie : ${e.message}');
  }
}

3. Implémenter la partie native

Android (Kotlin)

// MainActivity.kt
class MainActivity: FlutterActivity() {
    private val CHANNEL = "com.example.myapp/channel"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
            .setMethodCallHandler { call, result ->
                if (call.method == "getBatteryLevel") {
                    // Logique native ici
                    result.success(batteryLevel)
                } else {
                    result.notImplemented()
                }
            }
    }
}

iOS (Swift)

// AppDelegate.swift
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        let controller = window?.rootViewController as! FlutterViewController
        let channel = FlutterMethodChannel(
            name: "com.example.myapp/channel",
            binaryMessenger: controller.binaryMessenger)
        channel.setMethodCallHandler { (call, result) in
            if call.method == "getBatteryLevel" {
                // Logique native ici
                result(batteryLevel)
            } else {
                result(FlutterMethodNotImplemented)
            }
        }
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}

Web (JavaScript)

// web/index.html ou fichier js séparé
if (typeof window.flutter_channel !== 'undefined') {
    window.flutter_channel.postMessage('getBatteryLevel');
}

Bonnes pratiques

  • Utilisez des noms de canaux uniques et cohérents.
  • Gérez toujours les exceptions avec PlatformException.
  • Évitez les transferts de données volumineux via les canaux ; pour les gros fichiers, utilisez des chemins de fichiers ou EventChannel.
  • Testez le comportement natif sur des appareils réels ou des émulateurs.

Liens

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-building-plugins

Builds Flutter plugins that provide native interop for other apps to use. Use when creating reusable packages that bridge Flutter with platform-specific functionality.

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

Skills associés