九十九回 如何实现文件存储一

news/2024/7/7 23:23:40

文章目录

  • 概念介绍
  • 实现方法
  • 示例代码

我们在上一章回中介绍了"如何实现本地存储"相关的内容,本章回中将介绍 如何实现文件存储.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在上一章回中介绍的本地存储只能存储dart语言中基本类型的数值,如果遇到大的文件如何处理呢?本章回将介绍如何实现文件存储。在Flutter中文件存储相关的接口都在io库中,该库中常用的类是DirectoryFile。本章回中将详细介绍它们的使用方法。

实现方法

  1. 获取本地存储路径;
  2. 在路径中创建文件;
  3. 在文件中读写数据;

上面的步骤看着简单,实际上操作起来比较复杂,本章回先介绍第1个步骤:获取本地存储路径,下一章回再介绍另外两个步骤相关的知识。

本地存储路径在不同的平台上有不同的API接口,而且获取到的路径也不一样.难道我们要针对不同平台写不同的代码?不需要,Flutter官方已经想到了这个问题,并且帮助开发人员解决了此问题。
它提供了path_provider包,通过该包可以使用统一的API接口实现跨平台的功能。下面是该包的使用方法:

  1. 在yaml配置文件中导入包;
  2. 获取本地目录,目录的类型是Future;
  3. 从获取到的目录中获取文件路径,路径是绝对路径;

这些步骤看着简单,但是不容易理解,下面我们将通过示例代码来演示。这样可以方便大家理解上面的使用方法;

示例代码

  ///对应目录:data/user/0/package_name/cache
  Future<Directory?>? _tempDirectory;

  ///获取directory中的路径
  Widget _buildDirectory(BuildContext context,AsyncSnapshot<Directory?> snapshot) {
    Text text = const Text('');
    if(snapshot.connectionState == ConnectionState.done) {
      if(snapshot.hasError) {
        text = Text('Error: ${snapshot.error}');
      }else if (snapshot.hasData) {
        text = Text('Path: ${snapshot.data?.path}');
      }else {
        text = const Text('Path unavailable');
      }
    }

    return Padding(padding: const EdgeInsets.only(top: 2),child:text,);
  }

  ///通过包中的接口获取directory
  void _requestTempDirectory() {
    setState(() {
      _tempDirectory = getTemporaryDirectory();
    });
  }

上面的代码中先使用包中的接口getTemporaryDirectory()获取到了directory,然后在该directory中获取绝对路径。代码中把路径存放到了Text组件上,把Text组件放到页面上后就可以看到路径的具体值。这种方式参考了path_provider包官方给的示例,大家可以到官方文档中查看更加详细的内容。

包中还有其它的API接口给开发者使用,不同的接口可以获取到不同的路径,我在这里就不一一介绍了,大家可以参考官方文档。

看官们,关于"如何实现文件存储"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!


http://lihuaxi.xjx100.cn/news/1396525.html

相关文章

死锁产生的原因及解决方案

死锁 1. 死锁的成因2. 解决方案 1. 死锁的成因 互斥条件: 一个资源每次只能被一个进程使用。请求与保持条件&#xff1a;一个进程因请求资源而阻塞时&#xff0c;对已获得的资源保持不放。不可剥夺条件:进程已获得的资源&#xff0c;在末使用完之前&#xff0c;不能强行剥夺。…

【LeetCode 算法】Reorder List 重排链表

文章目录 Reorder List 重排链表问题描述&#xff1a;分析代码PointerReverseMerge Tag Reorder List 重排链表 问题描述&#xff1a; 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#…

js实现节流函数,当需要对一个高频触发的事件进行节流时,可以使用节流函数来限制事件的触发频率

当需要对一个高频触发的事件进行节流时&#xff0c;可以使用节流函数来限制事件的触发频率 function throttle(func, delay) {let timeoutId;return function() {if (!timeoutId) {timeoutId setTimeout(() > {func.apply(this, arguments);timeoutId null;}, delay);}};…

virbr是什么设备

virbr是什么设备 virbr是一个虚拟桥接网络设备&#xff0c;通常由虚拟机管理程序&#xff08;如 KVM、VirtualBox 或者 libvirt 等&#xff09;创建和管理。它用于在宿主机和虚拟机之间进行网络连接&#xff0c;以便虚拟机可以通过宿主机访问网络。 默认情况&#xff0c;libv…

嵌入式面试常见题目收藏(超总结)

​ 这篇文章来自很多博客主和其他网站的作者&#xff0c;如有侵权&#xff0c;联系必删 文章出处标注&#xff1a; https://blog.csdn.net/qq_44330858/article/details/128947083 ***如需PDF或者原稿可私信 *** ***如需PDF或者原稿可私信 *** ***如需PDF或者原稿可私信 *** 1.…

配置uniapp 的保姆级代码,拿来就能用!

闲下来整理一下最近使用uniapp遇到的问题。之前我开发的时候用的是vue2.0&#xff0c;uniapp有 uview2.x ui组件&#xff0c;后来又开发新项目使用了vue3.0 但是对UI的要求 uview2.x 不满足&#xff0c;还好后来又出了一个 uview-plus3.x(vue3)这个甚合心意呀&#xff0c;使用…

C语言,vs各种报错分析(不断更新)

1.引发了异常: 写入访问权限冲突2.#error: Error in C Standard Library usage 1.引发了异常: 写入访问权限冲突 这里是malloc没有包含头文件<stdlib.h>&#xff0c;包含之后就好了 2.#error: Error in C Standard Library usage 这里就是用C语言写程序时使用了C的头文件…

【Liux下6818开发板(ARM)】触摸屏

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…