es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Aplicación descargadora de archivos con paquete sn y diálogo de progreso.

¿Cómo cambiar el paquete progress_dialog al paquete sn_progress_dialog? Estoy intentando crear una aplicación de descarga de archivos con un cuadro de diálogo de progreso, pero el paquete progress_dialog no tiene seguridad nula.

  Future _downloadAndSaveFileToStorage(String urlPath) async {

    final name = urlPdf.split('/').last;

    ProgressDialog pr;
    pr = ProgressDialog(context, type: ProgressDialogType.Normal);
    pr.style(message: "Descargar archivo ...");

    try{
      await pr.show();
      final Directory _documentDir = Directory('/storage/emulated/0/MyDocuments/$name');
      await dio!.download(urlPath, _documentDir.path, onReceiveProgress: (rec, total){
        setState(() {
          _isLoading = true;
          progress = ((rec / total)*100).toStringAsFixed(0) + " %";
          print(progress);
          pr.update(message: "Por favor espera : $progress");
        });
      });
      pr.hide();
      _fileFullPath = _documentDir.path;
    } catch (e) {
      print(e);
    }

    setState(() {
      _isLoading = false;
    });

  }

Y esta es la captura de pantalla de mi aplicación con el paquete progress_dialog.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para cambiar del paquete progress_dialog al paquete sn_progress_dialog, sigue estos pasos:

    1. Actualiza tu archivo pubspec.yaml para incluir el paquete sn_progress_dialog:
    dependencies:
      sn_progress_dialog: ^1.0.0-nullsafety.0
    
    1. Elimina la declaración de importación para progress_dialog y reemplázala con sn_progress_dialog:
    // Reemplaza esto:
    import 'package:progress_dialog/progress_dialog.dart';
    
    // Con esto:
    import 'package:sn_progress_dialog/sn_progress_dialog.dart';
    
    1. Crea una instancia de la clase SnProgressDialog en lugar de ProgressDialog:
    // Reemplaza esto:
    ProgressDialog pr;
    pr = ProgressDialog(context, type: ProgressDialogType.Normal);
    
    // Con esto:
    SnProgressDialog pr = SnProgressDialog(context: context);
    
    1. Actualiza la llamada al método style para usar la propiedad message en lugar del parámetro message:
    // Reemplaza esto:
    pr.style(message: "Download file ...");
    
    // Con esto:
    pr.style(message: Text("Download file ..."));
    
    1. Finalmente, usa pr.show() y pr.dismiss() en lugar de pr.show() y pr.hide():
    // Reemplaza esto:
    pr.show();
    // ...
    pr.hide();
    
    // Con esto:
    pr.show();
    // ...
    pr.dismiss();
    

    Tu método actualizado _downloadAndSaveFileToStorage debería verse así:

    Future _downloadAndSaveFileToStorage(String urlPath) async {
      final name = urlPath.split('/').last;
    
      SnProgressDialog pr = SnProgressDialog(context: context);
      pr.style(
        message: Text("Download file ..."),
      );
    
      try {
        await pr.show();
        final Directory _documentDir = Directory('/storage/emulated/0/MyDocuments/$name');
        await dio?.download(urlPath, _documentDir.path,
            onReceiveProgress: (rec, total) {
          setState(() {
            _isLoading = true;
            progress = ((rec / total) * 100).toStringAsFixed(0) + " %";
            print(progress);
            pr.update(
              message: Text("Please wait : $progress"),
            );
          });
        });
        pr.dismiss();
        _fileFullPath = _documentDir.path;
      } catch (e) {
        print(e);
      }
    
      setState(() {
        _isLoading = false;
      });
    }
    

    Y el paquete progress_dialog debería haber sido reemplazado con el paquete sn_progress_dialog en tu aplicación.

Comments are closed.