Flutter audio_service y just_audio no funcionan con la navegación en iOS.
Tengo un proyecto con un servicio de audio y solo audio. Funciona bien en Android, pero no en iOS. Descubrí que esto sucede por la ruta de navegación.
Adjunté el proyecto de ejemplo. Ejemplo.
Si llamo la pantalla de Reproductor en casa, funciona. Si llamo primero a la pantalla de inicio y luego hay un botón para llamar a la pantalla de Reproductor, el usuario puede hacer clic en la pantalla del Reproductor, pero la canción no se reproduce. Se muestra el indicador de carga.
¿Sabe por qué no funciona?
davy.ai
Solución:
Basado en el proyecto de ejemplo proporcionado, parece que el problema está relacionado con cómo se maneja el enfoque de audio en iOS al navegar entre pantallas.
Cuando se navega desde la pantalla de inicio a la pantalla del reproductor, el enfoque de audio no se transfiere correctamente a la pantalla del reproductor, lo que resulta en que se muestre el indicador de carga en lugar de reproducirse el audio.
Para solucionar este problema, es necesario asegurarse de que el enfoque de audio se gestione correctamente al navegar entre pantallas.
Una solución sería crear una clase que maneje la gestión del enfoque de audio y usarla tanto en la pantalla de inicio como en la del reproductor. La clase se encargaría de transferir el enfoque de audio entre las pantallas al navegar de un lado a otro.
También puedes consultar la documentación oficial de Flutter sobre la reproducción de audio y vídeo para obtener más información sobre cómo implementar servicios de audio y gestionar el enfoque de audio.
Aquí tienes un ejemplo de cómo puedes implementar una clase que gestione el enfoque de audio:
Luego puedes usar esta clase en las pantallas de inicio y reproductor de la siguiente manera:
En el método
initState
de cada pantalla, puedes llamar arequestAudioFocus
para solicitar el enfoque de audio al entrar en la pantalla, y en el métododispose
, puedes llamar aabandonAudioFocus
para liberar el enfoque de audio al salir de la pantalla.Espero que esta solución ayude a resolver el problema.