Saltar al contenido principal

Usar paquetes

Cómo usar paquetes en tu aplicación de Flutter.

Flutter admite el uso de paquetes compartidos aportados por otros desarrolladores a los ecosistemas de Flutter y Dart. Esto permite construir rápidamente una aplicación sin tener que desarrollar todo desde cero.

Existing packages enable many use cases—for example, making network requests (http), navigation/route handling (go_router), integration with device APIs (url_launcher and battery_plus), and using third-party platform SDKs like Firebase (FlutterFire).

Para escribir un nuevo paquete, consulta desarrollar paquetes. Para añadir activos, imágenes o fuentes, ya sea que estén almacenados en archivos o paquetes, consulta Añadir activos e imágenes.

Usar paquetes

#

La siguiente sección describe cómo usar paquetes publicados existentes.

Buscar paquetes

#

Los paquetes se publican en pub.dev.

La página de inicio de Flutter en pub.dev muestra los paquetes principales que son compatibles con Flutter (aquellos que declaran dependencias generalmente compatibles con Flutter), y admite la búsqueda entre todos los paquetes publicados.

La página Flutter Favorites en pub.dev enumera los plugins y paquetes que han sido identificados como paquetes que primero deberías considerar usar al escribir tu aplicación. Para obtener más información sobre lo que significa ser un Flutter Favorite, consulta el programa Flutter Favorites.

También puedes explorar los paquetes en pub.dev filtrando por Android, iOS, web, Linux, Windows, macOS, o cualquier combinación de los mismos.

Añadir una dependencia de paquete a una aplicación usando flutter pub add

#

Para añadir el paquete english_words a una aplicación:

  1. Usa el comando pub add desde el directorio del proyecto

    • flutter pub add english_words
  2. Importarlo

    • Añade una instrucción import correspondiente en el código Dart.
  3. Detener y reiniciar la aplicación, si es necesario

    • Si el paquete trae código específico de la plataforma (Kotlin/Java para Android, Swift/Objective-C para iOS), ese código debe compilarse en tu aplicación. Hot Reload y Hot Restart solo actualizan el código Dart, por lo que podría ser necesario un reinicio completo de la aplicación para evitar errores como MissingPluginException al usar el paquete.

Añadir una dependencia de paquete a una aplicación

#

Para añadir el paquete english_words a una aplicación:

  1. Depender de él

    • Abre el archivo pubspec.yaml ubicado dentro de la carpeta de la aplicación, y añade english_words: ^4.0.0 bajo dependencies.
  2. Instalarlo

    • Desde la terminal: Ejecuta flutter pub get.
      O bien
    • Desde VS Code: Haz clic en Get Packages ubicado en el lado derecho de la cinta de opciones en la parte superior de pubspec.yaml indicado por el icono de Descarga.
    • Desde Android Studio/IntelliJ: Haz clic en Pub get en la cinta de opciones en la parte superior de pubspec.yaml.
  3. Importarlo

    • Añade una instrucción import correspondiente en el código Dart.
  4. Detener y reiniciar la aplicación, si es necesario

    • Si el paquete trae código específico de la plataforma (Kotlin/Java para Android, Swift/Objective-C para iOS), ese código debe compilarse en tu aplicación. Hot Reload y Hot Restart solo actualizan el código Dart, por lo que podría ser necesario un reinicio completo de la aplicación para evitar errores como MissingPluginException al usar el paquete.

Eliminar una dependencia de paquete de una aplicación usando flutter pub remove

#

Para eliminar el paquete english_words de una aplicación:

  1. Use the pub remove command from inside the project directory
    • flutter pub remove english_words

La pestaña Installing, disponible en cualquier página de paquete en pub.dev, es una referencia útil para estos pasos.

Para ver un ejemplo completo, consulta el ejemplo de english_words a continuación.

Resolución de conflictos

#

Supón que quieres usar some_package y another_package en una aplicación, y ambos dependen de url_launcher, pero en versiones diferentes. Eso causa un conflicto potencial. La mejor manera de evitar esto es que los autores de los paquetes utilicen rangos de versiones en lugar de versiones específicas al especificar las dependencias.

yaml
dependencies:
  url_launcher: ^5.4.0    # Good, any version >= 5.4.0 but < 6.0.0
  image_picker: '5.4.3'   # Not so good, only version 5.4.3 works.

Si some_package declara las dependencias anteriores y another_package declara una dependencia compatible con url_launcher como '5.4.6' o ^5.5.0, pub resuelve el problema automáticamente. Las dependencias específicas de la plataforma en módulos Gradle y/o CocoaPods se resuelven de manera similar.

Incluso si some_package y another_package declaran versiones incompatibles para url_launcher, es posible que en realidad utilicen url_launcher de maneras compatibles. En esta situación, el conflicto se puede resolver añadiendo una declaración de anulación de dependencia al archivo pubspec.yaml de la aplicación, forzando el uso de una versión en particular.

Por ejemplo, para forzar el uso de la versión 5.4.0 de url_launcher, realiza los siguientes cambios en el archivo pubspec.yaml de la aplicación:

yaml
dependencies:
  some_package:
  another_package:
dependency_overrides:
  url_launcher: '5.4.0'

Si la dependencia en conflicto no es un paquete en sí, sino una biblioteca específica de Android como guava, la declaración de anulación de dependencia debe añadirse a la lógica de compilación de Gradle en su lugar.

Para forzar el uso de la versión 28.0 de guava, realiza los siguientes cambios en el archivo android/build.gradle de la aplicación:

android/app/build.gradle.kts
kotlin
configurations.all {
    resolutionStrategy {
        force("com.google.guava:guava:28.0-android")
    }
}
android/app/build.gradle
groovy
configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:28.0-android'
    }
}

CocoaPods no ofrece actualmente funcionalidad de anulación de dependencias.

Desarrollar nuevos paquetes

#

Si no existe ningún paquete para tu caso de uso específico, puedes escribir un paquete personalizado.

Gestionar dependencias y versiones de paquetes

#

Para minimizar el riesgo de colisiones de versiones, especifica un rango de versiones en el archivo pubspec.yaml.

Versiones de paquetes

#

Todos los paquetes tienen un número de versión, especificado en el archivo pubspec.yaml del paquete. La versión actual de un paquete se muestra junto a su nombre (por ejemplo, consulta el paquete url_launcher), así como una lista de todas las versiones anteriores (consulta las versiones de url_launcher).

Para garantizar que la aplicación no falle cuando actualices un paquete, especifica un rango de versiones utilizando uno de los siguientes formatos.

  • Restricciones de rango: Especifica una versión mínima y máxima.

    yaml
    dependencies:
      url_launcher: '>=5.4.0 <6.0.0'
    
  • Restricciones de rango usando la sintaxis de intercalado (caret): Especifica la versión que sirve como versión mínima inclusiva. Esto cubre todas las versiones desde esa versión hasta la siguiente versión principal.

    yaml
    dependencies:
      collection: '^5.4.0'
    

    Esta sintaxis significa lo mismo que la indicada en la primera viñeta.

Para obtener más información, consulta la guía de versiones de paquetes.

Actualizar dependencias de paquetes

#

Al ejecutar flutter pub get por primera vez después de añadir un paquete, Flutter guarda la versión concreta del paquete que se encuentra en el archivo de bloqueo pubspec.lock lockfile. Esto garantiza que obtengas la misma versión nuevamente si tú, u otro desarrollador de tu equipo, ejecutan flutter pub get.

Para actualizar a una nueva versión del paquete, por ejemplo para usar nuevas funciones de ese paquete, ejecuta flutter pub upgrade para recuperar la versión disponible más alta del paquete que esté permitida por la restricción de versión especificada en pubspec.yaml. Ten en cuenta que este es un comando diferente de flutter upgrade o flutter update-packages, que actualizan Flutter en sí.

Dependencias de paquetes no publicados

#

Los paquetes se pueden usar incluso si no están publicados en pub.dev. Para paquetes privados o paquetes que no estén listos para publicarse, están disponibles opciones de dependencia adicionales:

Dependencia de ruta (path)

Una aplicación Flutter puede depender de un paquete usando una dependencia de ruta del sistema de archivos path:. La ruta puede ser relativa o absoluta. Las rutas relativas se evalúan con respecto al directorio que contiene pubspec.yaml. Por ejemplo, para depender de un paquete, packageA, ubicado en un directorio junto a la aplicación, usa la siguiente sintaxis:

yaml
  dependencies:
  packageA:
    path: ../packageA/
Dependencia de Git

También puedes depender de un paquete almacenado en un repositorio Git. Si el paquete está ubicado en la raíz del repositorio, usa la siguiente sintaxis:

yaml
  dependencies:
    packageA:
      git:
        url: https://github.com/flutter/packageA.git
Dependencia de Git usando SSH

Si el repositorio es privado y puedes conectarte a él usando SSH, depende del paquete utilizando la URL SSH del repositorio:

yaml
  dependencies:
    packageA:
      git:
        url: git@github.com:flutter/packageA.git
Dependencia de Git en un paquete en una carpeta

Pub asume que el paquete está ubicado en la raíz del repositorio Git. Si ese no es el caso, especifica la ubicación con el argumento path. Por ejemplo:

yaml
dependencies:
  packageA:
    git:
      url: https://github.com/flutter/packages.git
      path: packages/packageA

Finalmente, usa el argumento ref para fijar la dependencia a una confirmación (commit), rama (branch) o etiqueta (tag) de git específica. Para más detalles, consulta Dependencias de paquetes.

Ejemplos

#

Los siguientes ejemplos recorren los pasos necesarios para usar paquetes.

Ejemplo: Usar el paquete english_words

#

El paquete english_words contiene unos pocos miles de las palabras en inglés más utilizadas, además de algunas funciones de utilidad.

Para usar este paquete:

  1. Crea un nuevo proyecto llamado words_demo.

  2. Ejecuta dart pub add english_words para añadir la dependencia.

  3. Abre lib/main.dart y reemplaza todo su contenido con:

    dart
    import 'package:english_words/english_words.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(home: DemoPage());
      }
    }
    
    class DemoPage extends StatelessWidget {
      const DemoPage({super.key});
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(child: Text(generateWordPairs().first.asPascalCase)),
        );
      }
    }
    
  4. Ejecuta la aplicación. El texto de la aplicación debería mostrar un par de palabras aleatorias en inglés.

Ejemplo: Usar el paquete url_launcher para iniciar el navegador

#

El paquete de plugin url_launcher permite abrir el navegador predeterminado en la plataforma móvil para mostrar una URL dada, y es compatible con Android, iOS, web, Windows, Linux y macOS. Este paquete es un paquete de Dart especial llamado paquete de plugin (o plugin), que incluye código específico de la plataforma.

Para usar este plugin:

  1. Crea un nuevo proyecto llamado launchdemo.

  2. Abre pubspec.yaml y añade la dependencia url_launcher:

    yaml
    dependencies:
      flutter:
        sdk: flutter
      url_launcher: ^5.4.0
    
  3. Ejecuta flutter pub get en la terminal, o haz clic en Get Packages get en VS Code.

  4. Abre lib/main.dart y reemplaza todo su contenido con lo siguiente:

    dart
    import 'package:flutter/material.dart';
    import 'package:url_launcher/url_launcher.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(home: DemoPage());
      }
    }
    
    class DemoPage extends StatelessWidget {
      const DemoPage({super.key});
    
      void launchURL() {
        launchUrl(Uri.parse('https://flutter.dev'));
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: ElevatedButton(
              onPressed: launchURL,
              child: const Text('Show Flutter homepage'),
            ),
          ),
        );
      }
    }
    
  5. Ejecuta la aplicación (o deténla y reiníciala, si ya se estaba ejecutando antes de añadir el plugin). Haz clic en Show Flutter homepage. Deberías ver cómo se abre el navegador predeterminado en el dispositivo, mostrando la página de inicio de flutter.dev.