Botón Flutter que lee batería con MethodChannel
Curso de Integración Módulos Nativos iOS/Android para Flutter
Contenido del curso
Introducción a TensorFlow Lite
Integración de modelos y clasificación de imágenes
Reconocimiento de voz con Whisper
MethodChannel
Acceso a sensores y cámara
- 16

Configuración de Method Channel para cámara en Android desde Flutter
10:53 min - 17

Cámara iOS nativa con MethodChannel en Flutter
12:36 min - 18

Configuración de permisos y provider para cámara en Android
10:12 min - 19

Configuración de permisos de cámara en iOS para Flutter
06:38 min - 20

Integración de cámara nativa iOS en Flutter con Method Channels
13:51 min - 21

Controlador de cámara iOS con FlutterError
12:30 min - 22

Implementación de cámara nativa en apps Android con Flutter
12:22 min
Gestión de estado con BLoC
Reconocimiento de texto en imágenes
- 25

Parseo de montos desde texto OCR con regex
07:08 min - 26

Integración de UI con cámara para captura de fotos en Flutter
06:19 min - 27

Cámara en Flutter con BLoC y modal
08:59 min - 28

Actualización de dependencias y corrección de errores en Flutter iOS
15:44 min - 29

Diferencias entre Flutter y React Native para desarrollo móvil
11:54 min
Botón Flutter que lee batería con MethodChannel
Resumen
Conectar la lógica nativa con la interfaz visual es el paso que vuelve útil todo el trabajo previo con MethodChannel. Aprenderás a integrar un NativeCommunicator dentro del archivo main de Flutter para mostrar datos del sistema operativo, como el nivel de batería, directamente desde un botón en pantalla.
¿Cómo agregar un botón que invoque código nativo en Flutter?
Para exponer la funcionalidad nativa en la UI, basta con sumar un widget que llame al NativeCommunicator ya creado. La idea es que la interfaz reaccione a un toque y dispare el método que cruza el puente entre Flutter y el sistema operativo.
El flujo dentro de main queda así:
- Ubicar el nuevo botón debajo del speechToText existente.
- Llamar a
NativeCommunicatory al métodonativeMethodque envuelve la comunicación. - Invocar
getBatteryLevelcomo la funcionalidad concreta a ejecutar. - Imprimir el
resultpara validar la respuesta en consola.
Una vez conectado, el botón muestra el texto Obtener nivel de batería y dispara la lectura nativa cada vez que el usuario lo presiona.
¿Por qué usar async y await al llamar a MethodChannel?
La comunicación con código nativo no es instantánea: Flutter envía el mensaje, espera la respuesta del lado Android o iOS, y recién después puede mostrar el dato. Por eso, el onPressed necesita ser asíncrono.
El patrón en código se arma con tres piezas clave:
- La palabra reservada
asyncantes del cuerpo de la función. - El
awaitdelante de la llamada anativeMethod. - El tipado explícito del
resultcomoStringpara que Dart sepa qué espera recibir.
¿Qué hace async en Flutter? Marca una función como asíncrona, lo que permite usar
awaitdentro de ella y esperar resultados sin bloquear la interfaz.
Envolver toda la lógica entre paréntesis y cerrar con punto y coma es lo que convierte ese bloque en una función válida que el botón puede ejecutar.
¿Cómo probar el MethodChannel en un dispositivo físico?
El emulador funciona para pruebas básicas, pero leer hardware real, como la batería, se ve mejor en un celular conectado. Para esto se abre nuevamente runner.workspace y se despliega la aplicación en el dispositivo físico.
Después de que la build termina, en pantalla aparecen dos botones:
- Escuchar voz, que ya existía antes.
- Obtener nivel de batería, el botón nuevo que conecta con el código nativo.
Al presionar el segundo, la consola imprime el resultado entregado por el sistema operativo. En la prueba realizada, el valor devuelto fue 100 %, lo que confirma que el puente entre Flutter y el código nativo está funcionando en ambos lados.
¿Qué es MethodChannel en Flutter? Es el mecanismo que permite a Flutter invocar funciones escritas en Kotlin, Java, Swift u Objective C, y recibir datos desde Android e iOS hacia la capa Dart.
¿Qué aprendiste sobre Flutter y los componentes nativos?
Con esta integración queda demostrado que Flutter, mediante MethodChannel, accede a componentes propios de Android e iOS y trae datos del sistema operativo hacia la UI. La misma lógica que se usó para la batería sirve como plantilla para sensores, almacenamiento o cualquier API nativa.
Algunos conceptos que vale la pena fijar de esta práctica:
- NativeCommunicator [0:10]: la clase puente que centraliza las llamadas nativas y mantiene el código de UI limpio.
- nativeMethod y getBatteryLevel [0:45]: el método genérico que invoca al canal y la operación específica que pide el dato.
- async y await [1:30]: la combinación que asegura que el
resulttipado comoStringllegue antes de pintarlo en pantalla. - print del result [2:05]: la forma rápida de validar en consola que la información del sistema operativo llegó correctamente.
- Despliegue en dispositivo físico [2:20]: el paso que permite leer hardware real y confirmar el 100 % de batería como respuesta.
¿Te animas a replicar este botón con otra funcionalidad nativa, como el nivel de señal o el modelo del dispositivo? Cuéntame en los comentarios qué dato te gustaría exponer desde tu propia app.