福田区住房和建设局官方网站,云南网络优化公司有哪些,c++实现微博第三方登录 没有公司和网站如何做,wordpress只能本地访问flutter 文件下载及存储路径 前言一、下载进度条二、文件路径二、文件上传总结 前言
日常开发中#xff0c;经常会遇到下载文件的功能#xff0c;往往我们在需要保存文件的路径上去调试#xff0c;比如Android中的路径#xff0c;有些会报错在SD卡中#xff0c;但是有些手… flutter 文件下载及存储路径 前言一、下载进度条二、文件路径二、文件上传总结 前言
日常开发中经常会遇到下载文件的功能往往我们在需要保存文件的路径上去调试比如Android中的路径有些会报错在SD卡中但是有些手机又没有SD卡那么我们该怎么办呢 一、下载进度条
为了功能的完善往往需要一个下载的进度条当然UI怎么美化不管核心代码如下
Container(padding: EdgeInsets.symmetric(horizontal: 32.w),height: Get.height,alignment: Alignment.center,child: Obx(() Container(decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(4.r),),color: Colors.white,),child: Column(mainAxisSize: MainAxisSize.min,children: [Padding(padding: EdgeInsets.only(top: 22.h, bottom: 4.h),child: Text(发送文件,style: TextStyles.normalTextStyle(fontSize: 17.sp,fontWeight: FontWeight.w500,),),),Container(width: Get.width,padding:EdgeInsets.only(right: 24.w, left: 24.w, bottom: 12.h),child: Column(children: [Padding(padding: EdgeInsets.only(top: 8.h,bottom: 12.h,),child: Text(controller.scheduleLoad.value ! 100? 文件正在下载中,请稍候: 文件已下载完成,style: TextStyles.normalTextStyle(fontSize: 14.sp,color: Colours.textGrey9,),),),InkWell(onTap: controller.scheduleLoad.value 100? () {shareDialog(title);}: null,child: Container(height: 74.h,alignment: Alignment.center,child: SizedBox(height: 40.h,child: Stack(children: [ClipRRect(borderRadius:BorderRadius.all(Radius.circular(20.r)),child: SizedBox(height: 40.h,child: LinearProgressIndicator(value: double.tryParse(controller.scheduleLoad.value),backgroundColor: Colours.blueBtnBg02,valueColor: const AlwaysStoppedAnimation(Colors.blue,),),),),Center(child: Text(controller.scheduleLoad.value ! 100? 下载进度${controller.scheduleLoad.value}%: 分享文件,textAlign: TextAlign.center,style: TextStyles.normalTextStyle(color: Colors.white,fontSize: 14.sp,),),),],),),),),],),),],),),),)上面的代码中定义了一个视图用来展示下载进度的信息这里我使用的是getx 的状态管理直接使用Obx进行下载数据的实时监听刷新。
二、文件路径
首先我们需要传入一个文件的下载路径然后使用三方插件path_provider来获取文件的路径。 if (filePath ! null) {String? docPath;if (Platform.isAndroid) {docPath /storage/emulated/0/Download/;Directory dir Directory(docPath);try {dir.listSync();}catch (e){// 一些系统没有权限docPath (await getExternalStorageDirectory())?.path;docPath $docPath/;}} else {docPath (await getTemporaryDirectory()).path;docPath docPath.replaceFirst(Library/Caches, Documents/);}loadFilePath $docPath$name.docx;}上面的代码中docPath 定义的一个路径字面意思就是模拟器中的外部下载文件路径但是在有些手机中没有外部SD卡那么我们再获取一下当前设备的内部SD卡路径 (await getTemporaryDirectory()).path 其实getTemporaryDirectory 字面意思也是获取的外部存储路径但是在没有外部SD卡的时候他会获取内部的存储路径。
二、文件上传
文件上传部分直接使用Dio 中封装好的方法就行 await Dio().download(filePath, loadFilePath, onReceiveProgress: (int received, int total) {if (total ! -1) {scheduleLoad.value (received / total * 100).toStringAsFixed(0);}});
到此为止整个文件的下载保存功能就做完了可以直接在手机的下载文件目录中查看下载的文件 总结