You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文件下载器应用如何将progress_dialog替换为sn_progress_dialog实现空安全

sn_progress_dialog适配改造方案

1. 依赖安装

首先在pubspec.yaml中添加依赖:

dependencies:
  sn_progress_dialog: ^1.1.4 # 可替换为当前最新稳定版

执行flutter pub get完成安装后,在业务代码文件顶部导入包:

import 'package:sn_progress_dialog/sn_progress_dialog.dart';

2. 业务代码改造

替换原有progress_dialog相关逻辑即可,适配后的完整代码如下:

Future _downloadAndSaveFileToStorage(String urlPath) async {
  final name = urlPdf.split('/').last;
  // 初始化进度弹窗实例
  SnProgressDialog pr = SnProgressDialog(context: context);

  try{
    // 显示弹窗,对应原pr.show(),无需await
    pr.show(
      msg: "Download file ...",
      progressType: ProgressType.normal,
    );
    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()
        pr.update(
          value: double.parse(progress.replaceAll(" %", "")),
          msg: "Please wait : $progress",
        );
      });
    });
    // 隐藏弹窗,对应原pr.hide()
    pr.close();
    _fileFullPath = _documentDir.path;
  } catch (e) {
    print(e);
    // 异常场景主动关闭弹窗
    pr.close();
  }

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

3. 可选配置说明

如果需要还原原有弹窗的视觉样式,可以在pr.show()方法中传入以下参数自定义:

  • 背景色:backgroundColor
  • 文案颜色:msgColor
  • 进度条颜色:progressColor
  • 圆角大小:borderRadius
  • 最大/最小宽高:maxWidth/minHeight
    参数命名和原progress_dialog的style方法基本一致,直接调整即可匹配原有效果。

内容的提问来源于stack exchange,提问作者PutPut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:36:03