文件下载器应用如何将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
相关产品推荐
相关产品推荐

