flutter 文件下载及存储路径

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);}});

到此为止,整个文件的下载保存功能就做完了,可以直接在手机的下载文件目录中查看下载的文件


总结

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/342717.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 调试工具CocoaDebug

1、使用pod工具在项目里面添加CocoaDebug的SDK。 platform :ios, 11.0target ShopService doproject ShopServiceuse_frameworks!pod CocoaDebug, :configurations > [Debug]end2、之后就可以在项目里面看到效果了 APP上显示的是一个黑色背景的小圆圈。 上面39表示调用了39…

研究了Web版Photoshop,提升自己=提升价值

Adobe 发布了Web版 Photoshop🔗,它是使用 WebAssembly、web components、P3 颜色等 Web 技术构建的。本文就来研究一下网页版 Photoshop 上有趣又有用的 CSS 知识! Photoshop 旧 Logo 首先,在浏览器控制台中使用了 Photoshop 的 …

揭秘虾皮API接口:开启电商开发新篇章,引领业务增长潮流

虾皮API接口技术详解 一、概述 虾皮API接口是虾皮电商平台为开发者提供的一套应用程序接口,允许第三方开发者通过编程方式访问虾皮平台上的商品、订单、用户等数据,并执行相关操作。通过使用虾皮API接口,开发者可以快速构建与虾皮平台集成的…

2024-1-12 关于SVPWM的理解疑问

直流母线电压利用率是指逆变电路(电机控制器)所能输出的交流电压基波最大幅值U1m和直流母线电压之比。 电压利用率 SVPWM算法理解(二)——关于非零基本矢量幅值和线电压幅值的解释 因此我们在实际应用中提供的直流侧电压Udc,应该大于等于所需要输出的三相相电压幅值的√…

基于springboot+vue的网上花卉商城系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

公司寄快递教程

公司寄快递用哪个更划算?这个问题有最优解吗?恐怕没有......很简单,回答这个问题之前,我们先来看看公司寄快递的背景。 一、大背景 所谓的大背景是由国内快递行业的发展现状所决定的。众所周知,这十年来,国…

SpringBoot 源码解析4:refresh 方法解析

SpringBoot 源码解析4:refresh 方法解析 1. refresh 方法解析2. 准备刷新 AbstractApplicationContext#prepareRefresh3. 获取bean工厂 AbstractApplicationContext#obtainFreshBeanFactory4. 准备bean工厂 AbstractApplicationContext#prepareBeanFactory5. Servle…

React项目搭建流程

第一步 利用脚手架创建ts类型的react项目: 执行如下的命令:create-react-app myDemo --template typescript ; 第二步 清理项目目录结构: src/ index.tsx, app.txs, react-app-env.d.ts public/index.ht…

教程-右键用vscode(新窗口)打开文件或目录

通过本文可以提高效率,用起来更爽更高效。 本文实现了(windows系统): 右键-用vscode(当前窗口)打开文件或目录右键-用vscode-新窗口打开文件或目录 注意: 下面的安装路径要更改为您实际的路径 具体配置步骤&#x…

一键转换,创新无限:将HTML轻松转化为PDF!

在数字时代,HTML与PDF已成为信息传递的两大主流格式。然而,在这两者之间转换常常让人感到困扰。现在,有了我们的创新工具,您只需轻点一下,即可一键将HTML转化为PDF! 首先,我们要进入首助编辑高…

(超详细)3-YOLOV5改进-添加SE注意力机制

1、在yolov5/models下面新建一个SE.py文件,在里面放入下面的代码 代码如下: import numpy as np import torch from torch import nn from torch.nn import initclass SEAttention(nn.Module):def __init__(self, channel512,reduction16):super()._…

羊奶的奶源,解密优质健康的来源

羊奶的奶源,解密优质健康的来源 羊奶一直被视为高品质、健康的乳制品,备受消费者的喜爱。作为一位消费者,你一定也想了解羊奶的奶源,究竟是如何保障了这种优质与健康呢?下面小编羊大师就带大家一同了解一下。 我们需…