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

文章目录

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

我们在上一章回中介绍了"如何实现本地存储"相关的内容,本章回中将介绍 如何实现文件存储.闲话休提,让我们一起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接口给开发者使用,不同的接口可以获取到不同的路径,我在这里就不一一介绍了,大家可以参考官方文档。

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

你可能感兴趣的:(一起Talk,Flutter吧,Flutter文件存储,path_provider,本地存储路径)