Loading repository data…
Loading repository data…
PanoccaJhon / repository
Comunicación Nativa en Flutter Este repositorio explora la interoperabilidad Flutter (Dart) con código nativo (Kotlin/Swift). Cubre MethodChannel, EventChannel, BasicMessageChannel, Pigeon para comunicación estructurada, y FFI para interacción directa de alto rendimiento con C/C++. Un recurso clave para extender tus apps Flutter.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
¡Bienvenido a este repositorio! Aquí exploraremos cómo Flutter se comunica con el código nativo de Android (Kotlin) e iOS (Swift), un aspecto crucial para construir aplicaciones potentes y completas. Si alguna vez te preguntaste cómo acceder a funcionalidades específicas del dispositivo o integrar librerías nativas, ¡estás en el lugar correcto!
Este proyecto es una guía práctica y un conjunto de ejemplos funcionales que demuestran las principales estrategias de comunicación entre Dart y las plataformas nativas.
Aquí tienes un desglose de las herramientas que aprenderás a usar:
El caballo de batalla para la comunicación bidireccional. Con MethodChannel, tu código Dart puede invocar métodos específicos en el lado nativo (Kotlin/Swift), pasarles argumentos y recibir un resultado de forma asíncrona.
Perfecto para recibir flujos continuos de eventos desde el código nativo hacia Flutter. Si necesitas que tu app reaccione a cambios constantes o notificaciones, EventChannel es tu aliado.
Este es el canal más genérico y de bajo nivel. Permite enviar mensajes arbitrarios (binarios o estructurados) entre Dart y el nativo. Ofrece mayor flexibilidad en el formato de datos usando un MessageCodec.
MethodChannel y EventChannel no se ajustan a tus necesidades particulares.Una herramienta de generación de código desarrollada por el equipo de Flutter. Pigeon simplifica y hace más robusta la comunicación, eliminando el código repetitivo (boilerplate) y los errores de tipo. Defines tus APIs en un archivo simple, y Pigeon genera automáticamente todo lo necesario para Dart, Kotlin/Java y Swift/Objective-C.
Permite a tu aplicación Dart interactuar directamente con librerías nativas escritas en C (o lenguajes compatibles con C, como C++ con extern "C"). Es la opción para alto rendimiento y acceso a funcionalidades de bajo nivel.
Este ejemplo demuestra cómo utilizar MethodChannel para implementar una calculadora básica que realiza suma, resta, multiplicación y división. Aprenderás a enviar múltiples argumentos desde Flutter al código nativo y a manejar diferentes operaciones dentro de un mismo canal.
Definición del Canal en Flutter (Dart):
lib/calculator_channel.dart.MethodChannel con un nombre único ('com.pe.lab09/calculator').calculate(operation, a, b) que usa _calculatorChannel.invokeMethod(operation, {'a': a, 'b': b}) para enviar la operación y los números como un mapa de argumentos al lado nativo.Interfaz de Usuario en Flutter (Dart):
lib/main.dart para crear una interfaz de calculadora simple.TextFields para la entrada de dos números y ElevatedButtons para cada operación (suma, resta, multiplicación, división)._performOperation(String operation) que, a su vez, invoca al método calculate de CalculatorChannel.Text en la interfaz.Lógica Nativa en Android (Kotlin):
android/app/src/main/kotlin/com.tuapp.nombre/MainActivity.kt.MethodChannel con el mismo nombre que en Dart.setMethodCallHandler, se extrajeron los argumentos (a y b) del call.argument<Double>().when (call.method) para ejecutar la lógica matemática correspondiente (add, subtract, multiply, divide).result.error() a Flutter si ocurre.result.success(operationResult) de vuelta a Flutter, o result.notImplemented() si el método no se reconoció.Lógica Nativa en iOS (Swift):
ios/Runner/AppDelegate.swift.FlutterMethodChannel con el mismo nombre que en Dart y Android.setMethodCallHandler, se extrajeron los argumentos (a y b) del call.arguments as? [String: Any].switch call.method para procesar la operación solicitada.FlutterError a Flutter en caso de ser necesario.result(res)) o un error (result(FlutterError)) de vuelta a Flutter.