downloader_manager 3.0.0 copy "downloader_manager: ^3.0.0" to clipboard
downloader_manager: ^3.0.0 copied to clipboard

downloader_manager es una librería para Dart que te permite gestionar descargas de archivos desde internet de forma sencilla, eficiente y controlada. ¡Automatiza, pausa, reanuda, monitorea y detén des [...]

📦✨ downloader_manager #

downloader_manager es una poderosa librería para Dart que facilita la gestión avanzada de descargas de archivos desde internet. Utiliza rangos de descarga (descarga por partes) y aprovecha isolates para realizar descargas en paralelo sin bloquear la interfaz de usuario ni el hilo principal de tu aplicación. Es ideal para aplicaciones que requieren descargas concurrentes, seguimiento de progreso en tiempo real y control total sobre cada tarea de descarga.


🚀 Características principales #

  • 📥 Descarga múltiples archivos simultáneamente sin afectar el rendimiento de tu app.
  • ⏸️ Pausa y ▶️ reanuda descargas en cualquier momento.
  • 🛑 Detén, cancela y elimina tareas de descarga de forma segura.
  • 📊 Monitorea el progreso y estado de cada descarga con streams reactivos.
  • 🏷️ Identifica y controla descargas mediante tokens únicos.
  • ⚡ Descarga archivos por rangos (descarga por partes) para mayor eficiencia.
  • 🧩 Gestiona errores y eventos en tiempo real para una experiencia robusta.
  • 🧵 Aprovecha isolates para descargas en paralelo y mayor rendimiento.
  • 🧹 Libera recursos y cierra todos los isolates fácilmente.

🛠 Instalación #

Agrega la dependencia en tu archivo pubspec.yaml:

dependencies:
  downloader_manager:
    git: https://github.com/surco123es/downloader_manager

Luego ejecuta:

dart pub get

💡 Ejemplo de uso completo #

import 'dart:io';
import 'package:downloader_manager/downloader_manager.dart';

void main() async {
  final manDown = DownloaderManager();

  // Inicializa el manager con 3 isolates (hilos de descarga)
  await manDown.init(
    numThread: 3, 
    setting: ManSettings(
      folderOut: 'descargas/',
      folderTemp: 'temporal/',
      conexion: 4,
      limitBand: 8000,
    ),
  );

  // Inicia una descarga
  final response = await manDown.download(
    req: DownRequire(
      url: 'https://tuservidor.com/archivo.zip',
      fileName: 'archivo.exe',
      extension: false,
      tokenDownload: 10001,
    ),
  );

  // Controla la descarga usando el token
  final controller = manDown.controller(response.token);
  if (!controller.exists) return;

  // Ejemplo: Pausar y reanudar la descarga automáticamente al 50%
  bool pause = false;
  controller.controller!.listen((e) {
    if (e.error) {
      print('❌ Existió un error');
    }
    print('📊 Progreso: ${e.main.porcent}%');
    if (e.main.porcent > 50 && !pause) {
      manDown.pause(response.token);
      print('⏸️ Descarga pausada');
      pause = true;
      Future.delayed(Duration(seconds: 3), () {
        print('▶️ Reanudando descarga');
        manDown.resume(response.token);
      });
    }
    if (e.main.complete) {
      Future.delayed(Duration(seconds: 3), () {
        print('🧹 Apagando los isolates');
        manDown.dispose();
      });
    }
  });

  // Ejemplo: Consultar el estado actual de la descarga
  final status = manDown.status(response.token);
  print('ℹ️ Estado actual: ${status.status}');

  // Ejemplo: Cancelar la descarga en cualquier momento
  // manDown.cancel(token: response.token);

  // Ejemplo: Forzar la descarga si el archivo ya existe (renombrando)
  // manDown.forzeDownload(token: response.token, rename: 'nuevo_nombre.exe');
}

🧩 API de DownloaderManager con ejemplos #

  • 🆕 init({required int numThread, ManSettings? setting})
    Inicializa el gestor con el número de isolates deseado.

  • 📥 download({required DownRequire req})
    Inicia una nueva descarga.

  • ⏸️ pause(int token)
    Pausa la descarga asociada al token.

    manDown.pause(response.token);
    
  • ▶️ resume(int token)
    Reanuda la descarga pausada.

    manDown.resume(response.token);
    
  • ℹ️ status(int token)
    Obtiene el estado actual de la descarga.

    final status = manDown.status(response.token);
    print('Estado: ${status.status}');
    
  • 📡 controller(int token)
    Obtiene el stream para escuchar el progreso y eventos de la descarga.

    final controller = manDown.controller(response.token);
    controller.controller!.listen((e) {
      print('Progreso: ${e.main.porcent}%');
    });
    
  • cancel({required int token})
    Cancela y elimina la tarea de descarga.

    manDown.cancel(token: response.token);
    
  • 🧹 dispose()
    Libera todos los recursos y cierra los isolates.

    manDown.dispose();
    

⚡ Requisitos #

  • Dart SDK ^3.7.1
  • http ^1.1.0

🤝 Contribuciones #

¡Las contribuciones son bienvenidas! Abre un issue o pull request en GitHub.


📄 Licencia #

MIT License


¡Gestiona tus descargas como un profesional con downloader_manager! 🚀🎉

5
likes
0
points
49
downloads

Publisher

verified publishernio.ilove-soft.com

Weekly Downloads

downloader_manager es una librería para Dart que te permite gestionar descargas de archivos desde internet de forma sencilla, eficiente y controlada. ¡Automatiza, pausa, reanuda, monitorea y detén descargas fácilmente en tus proyectos Dart o Flutter!

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

http, mutex

More

Packages that depend on downloader_manager