Seleccionar página
Soluciones al error «pub get failed (69)» de Flutter

Written by Gibran

junio 30, 2020

Nos encontramos desarrollando la primer aplicación móvil para la empresa en Android Studio con el framework de Flutter, el cuál nos permitirá publicar la aplicación tanto para IOS y Android en tiempo record, pero un error nos impide instalar los paquetes que utilizaremos. «pub get failed (69)»….

Saludos! Si llegaste aquí probablemente estés en un escenario parecido, o te gustan demasiado los blogs de tecnología. Este error ocurre cuando trabajamos en redes corporativas mediante conexiones proxy, las cuales suelen evitar ciertas conexiones que son necesarias para que nuestro Android Studio pueda descargar los paquetes para nuestra aplicación.

El error se puede replicar al intentar correr nuestra aplicación, entonces la consola nos mostraría el siguiente mensaje en loop hasta que finalicemos dart.exe:

Running «flutter pub get» in your_app…                        
Could not resolve URL «https://pub.dartlang.org«.
pub get failed (69) — attempting retry 1 in 1 second…

 

A continuación te comparto algunas soluciones que me han servido o habrían podido servir. Es probable que tu problema se solucione con la primera, pero también podrías tener mi misma suerte y hallar que la última que ofrezco es la única opción. 

1.- Solicita un nodo de acceso libre.

Esta es la solución mas simple y diplomática, pide a tu administrador de red acceso libre a Internet, de esta manera podrás trabajar cómodamente.

Es común que en las empresas, los nodos libres se otorguen por tiempo limitado y siempre bajo pedido justificado. Puedes mezclar esta propuesta y la 3era o 4a mencionadas en este artículo para ahorrarte la petición de nuevos nodos en nuevos proyectos con paquetes que ya tengas descargados.

En mi caso, quise evitar levantar un request cada que actualizara o descargara un nuevo paquete, lo cual fue una mala desición, ya que me llevó a conocer las siguientes alternativas. Asegúrate de que la configuración de Android Studio para conexión mediante proxy esté desactivada y preferiblemente nunca haya estado configurada, mas detalles del porque en el siguiente punto.

 

2.- Configura la conexión proxy de Android Studio.

Utiliza esta opción solo en caso de que no se te pueda proporcionar el nodo libre.

Para poder tener salida al Internet desde Android Studio mediante proxy, ve a File-> Settings; después, dentro de la ventana emergente: Appearance & Behavior -> System Settings -> HTTP Proxy.  Preferiblemente selecciona la configuración Manual e ingresa los datos necesarios. No olvides dar click en «Apply» para que se efectuén los cambios.

Aqui dejo una captura del emergente: 

En el punto 1 había mencionado evitar usar esta configuración, la razón es que yo experimenté lo siguiente: Al principio solicitaba acceso al internet libre para obtener mis paquetes, pero después de varias peticiones, se me recomendó habilitar mi conexión mediante proxy para no depender de la atención a los requests. Así que procedí y efectivamente pude descargar algunos paquetes, pero no todos, ya que el servidor proxy tenía sus propias reglas de seguridad. Después de esto volví a pedir el nodo libre y desactivé la configuración proxy, pero a la fecha Android Studio sigue intentando acceder mediante el proxy a pesar de tenerlo desactivado y acceso al internet libre. Por tanto no lo recomiendo, ya que solo permite la descarga de algunos paquetes.

 

3.- Obtén los paquetes mediante ‘flutter get’ en una red abierta mediante tu equipo de trabajo.

Esta solución solo es posible si tu equipo es portatil.

Paso 1: Lleva tu equipo a tu casa a un sitio con red abierta.

Paso 2: Dirígete a tu archivo pubspec.yaml y da click en la parte superior derecha de la vista previa en el link «Packages get».

Paso 3: Cuando el proceso haya completado, podrás regresar a tu lugar de trabajo y disfrutar de tus paquetes. 

 

4.- Ejecuta ‘flutter get’ en una red abierta mediante otro equipo para después importar los paquetes a tu equipo corporativo.

Si no tienes forma de llevar tu equipo a una red amistosa, necesitarás obtener tus paquetes en otro equipo. Este fue mi caso, ya que como mencioné, la configuración proxy está maldita y no he podido desactivarla. Así que yo hago lo siguiente: 

Paso 1: En mi equipo personal, agrego mis paquetes a pubspec.yaml (Esto puede ser en un nuevo proyecto o en una copia del original)

 

 

Paso 2: Obtengo mis paquetes mediante el botón de «Packages get» o ejecuto mi aplicación para obtenerlos automáticamente como parte del proceso de compilación.

Paso 3: En una ventana de explorador, me dirijo a la carpeta «build» de mi proyecto. 

Paso 4: Ahí se encuentran las carpetas de los paquetes.
Ojo: no necesitamos todo el contenido, solo las carpetas de los paquetes, las cuales podremos identificar por su nombre, Aqui un screenshot de mi carpeta:

Paso 5: Copio todas las carpetas de mis paquetes (Para mi ejemplo, serían todas las carpetas excepto «app«) y las pego en la carpeta build del proyecto que tengo en mi equipo corporativo.

Paso 6: En la terminal de Android Studio, ejecuto:

<RUTA DONDE TENGO EL SDK DE FLUTTER>\flutter\bin\flutter.bat pub get –offline

Y listo.

A partir de este momento tengo mis paquetes instalados y puedo continuar mi desarrollo.

 

Conclusión:

La verdad es un dolor de cabeza desarrollar desde una red cerrada, no solo usando Flutter, sino con todo framework que descargue paquetes. La cuarta solución aquí propuesta puede parecer problemática por el hecho de tener que hacer operaciones en otro equipo y en otra red, pero solo debe hacerse cuando hay un nuevo paquete o se desea actualizar alguno. Para proyectos posteriores, dispondremos ya de los paquetes en nuestros equipos y solo será cuestión de copiar, pegar, y ejecutar pub get –offline.

La mejor alternativa será siempre pedir un nodo libre y, créeme, es mejor pedirlo cada que se necesita, a tener que recurrir a un equipo diferente para obtener los paquetes. Si he explicado algo aqui de manera confusa y ayudaría una mejor explicación, no dudes en contactarme e intentaré ser mas claro.

Por el momento me despido.

¡Paz y bien!