繁体   English   中英

无法打印 Flutter_downloader 进度

[英]Can't print Flutter_downloader progress

我正在尝试使用 Flutter_downloader 让我的应用程序能够下载一些附件文件并且它工作得很好。 所以我将 Isolate 设置为 class 来整理并尝试使用进度,这样我就可以在我的 UI 中显示下载进度,但进度保持为 0。

如何解决这个问题? 下载工作正常。

Flutter 下载器隔离码:

class DownloaderIsolate {
  //Callback for the Flutter_Downloader
  static downloadCallback(String id, DownloadTaskStatus status, int progress) {
    final SendPort send =
        IsolateNameServer.lookupPortByName('downloader_send_port')!;
    send.send([id, status, progress]);
  }

  static setupDownloaderPort({int? progress}) {
    ReceivePort _port = ReceivePort();

    IsolateNameServer.registerPortWithName(
        _port.sendPort, 'downloader_send_port');

    FlutterDownloader.registerCallback(DownloaderIsolate.downloadCallback);

    _port.listen((dynamic data) {
      String id = data[0];
      DownloadTaskStatus status = data[1];
      progress = data[2];
    });
  }
}

我的用户界面页面代码:

int? progress = 0;

void initState(){
    DownloaderIsolate.setupDownloaderPort(progress: progress);
}

Widget build(BuildContext context) {
  //Some Parents Code
  //Trying to show the progress in String
      Text(progress.toString()),
  //Also Trying to show the progress
      Text('$progress'),
}

问题可能是您需要“setState”才能让您的 UI 更新,但您不能在 isolate class 中设置状态。您可以尝试以下操作:

Flutter 下载器隔离码:

static setupDownloaderPort({required Function(int) updateProgress}) {
    ReceivePort _port = ReceivePort();

    IsolateNameServer.registerPortWithName(
        _port.sendPort, 'downloader_send_port');

    FlutterDownloader.registerCallback(DownloaderIsolate.downloadCallback);

    _port.listen((dynamic data) {
      String id = data[0];
      DownloadTaskStatus status = data[1];
      updateProgress(data[2]);
    });
  }

用户界面页面:

int? progress = 0;

void initState(){
    DownloaderIsolate.setupDownloaderPort(updateProgress: (_p) {
      progress = _p;
    });
    super.initState();
}

Widget build(BuildContext context) {
  //Some Parents Code
  //Trying to show the progress in String
      Text(progress.toString()),
  //Also Trying to show the progress
      Text('$progress'),
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM