Flutter compartir archivos Android (intents + SDK + dependencias)
Introducción
Implementar correctamente Flutter compartir archivos Android puede parecer una tarea simple, pero en la práctica es uno de los escenarios más complejos cuando se trabaja con integración nativa en Android. Especialmente si necesitas recibir archivos desde el explorador o desde otras aplicaciones, tanto con la app cerrada como abierta.
En este artículo aprenderás cómo resolver problemas reales al implementar Flutter compartir archivos Android, incluyendo el uso del plugin receive_sharing_intent, el manejo de MainActivity onNewIntent Flutter Android, errores con Android Intents y conflictos con versiones de SDK. Además, veremos cómo lidiar con casos específicos como Flutter archivos MHTML Android y dependencias que exigen configuraciones particulares.
Si alguna vez te encontraste con errores que “desaparecen solos”, configuraciones que no se aplican o archivos que no llegan cuando la app está abierta, aquí tienes una guía completa basada en experiencia real.
Cómo funciona Flutter compartir archivos Android
Para implementar Flutter compartir archivos Android, normalmente se utiliza el plugin receive_sharing_intent, que permite capturar archivos enviados desde otras aplicaciones mediante Android Intents.
Android utiliza intents para compartir datos entre aplicaciones, como se explica en la documentación oficial de Android Developers. Esto significa que tu app debe estar preparada para recibir diferentes tipos de acciones como:
ACTION_SENDACTION_SEND_MULTIPLEACTION_VIEW
El problema es que estos intents no se comportan igual en todos los escenarios.
Subtema: Cold start vs Warm start
Uno de los errores más comunes en Android Intent compartir archivos Flutter ocurre cuando:
- Cold start (app cerrada) → funciona correctamente
- Warm start (app abierta) → el archivo no se recibe
Esto pasa porque Flutter no actualiza automáticamente el intent activo.
Solución clave: onNewIntent
Para solucionar esto, es necesario modificar MainActivity:
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
Este cambio permite que Flutter detecte nuevos intents cuando la app ya está abierta, resolviendo el problema en MainActivity onNewIntent Flutter Android.
Configuración correcta de Intents en Android
Otro punto crítico en Flutter compartir archivos Android es la configuración del AndroidManifest.xml.
Muchos errores vienen de filtros mal definidos. La configuración recomendada es:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
<data android:scheme="content" />
<data android:scheme="file" />
</intent-filter>
Según la guía de Flutter Docs para Android devs, Flutter puede manejar intents, pero requiere que Android esté correctamente configurado.
Puntos clave
- Usar
SEND_MULTIPLEsiempre - Evitar MIME types específicos
- Usar
*/*para mayor compatibilidad - Filtrar archivos en Flutter, no en Android
Esto es esencial para que funcione correctamente con receive_sharing_intent Flutter Android y casos como Flutter archivos MHTML Android.
Problemas con SDK y dependencias en Flutter Android
Uno de los problemas más confusos al trabajar con Flutter compartir archivos Android es cuando el proyecto no reconoce la versión de SDK configurada.
En nuestro caso, configuramos:
compileSdk = 37
targetSdk = 37
Pero el proyecto no lo reconocía.
Subtema: SDK Platform vs Build Tools
El error estaba en no tener instalado el SDK correcto.
En Android Studio → SDK Manager:
- Build Tools (ej: 37.1) → no es suficiente
- SDK Platform (android-37) → es obligatorio
Hasta que instalamos android-37, el problema se resolvió.
Dependencias que rompen la compatibilidad
Otro problema real al implementar Flutter compartir archivos Android ocurre cuando una dependencia requiere una versión específica de SDK.
Nos pasó con una librería que:
- Funcionaba en Windows
- Pero en Android exigía SDK 36
Intentamos:
compileSdk = 36
targetSdk = 36
Pero no funcionó porque el SDK no estaba instalado.
Decisión práctica: cambiar la librería
Optamos por usar file_selector, que no tenía ese requisito, y todo funcionó correctamente.
Puntos clave al elegir dependencias
- Verificar requisitos de SDK
- Validar compatibilidad con Android
- Revisar mantenimiento del paquete
Esto es especialmente importante en proyectos que usan receive_sharing_intent Flutter Android o manejan Flutter archivos MHTML Android.
Problemas con Visual Studio Code y caché
Otro comportamiento curioso que encontramos fue:
- Cambios que no se reflejaban
- Errores que persistían sin razón
- Builds inconsistentes
Incluso ocurrió que:
Un error seguía en la noche… y al día siguiente ya no estaba.
¿Por qué pasa esto?
Se debe a:
- caché de Gradle
- procesos en segundo plano
- sincronización incompleta
Buenas prácticas
- Ejecutar
flutter clean - Reiniciar el IDE
- Recompilar completamente
Manejo de archivos MHTML en Flutter Android
Trabajar con Flutter archivos MHTML Android agrega complejidad adicional.
Muchos exploradores:
- no envían MIME correcto
- usan
application/octet-stream - o
*/*
Por eso:
- debes aceptar todos los tipos en Android
- y filtrar por extensión en Flutter

Conclusión
Implementar correctamente Flutter compartir archivos Android implica mucho más que usar un plugin. Es necesario entender cómo Android maneja los intents, cómo Flutter interactúa con ellos y cómo influyen factores externos como el SDK, las dependencias y el entorno de desarrollo.
La solución completa incluye:
- Configurar correctamente AndroidManifest
- Manejar
onNewIntenten MainActivity - Instalar el SDK correcto
- Elegir dependencias compatibles
- Controlar el comportamiento del entorno
Si estás trabajando con Android Intent compartir archivos Flutter o usando receive_sharing_intent Flutter Android, aplicar estas prácticas te permitirá evitar errores comunes y construir una solución robusta.
Como siguiente paso, te recomiendo probar tu implementación en distintos dispositivos y exploradores de archivos para asegurar compatibilidad total.
