首页 > 其他分享 >一统天下 flutter - 存储: path_provider - 用于获取不同平台的本地存储的路径

一统天下 flutter - 存储: path_provider - 用于获取不同平台的本地存储的路径

时间:2023-05-06 14:44:06浏览次数:48  
标签:存储 const ios provider path android flutter

源码 https://github.com/webabcd/flutter_demo
作者 webabcd

一统天下 flutter - 存储: path_provider - 用于获取不同平台的本地存储的路径

示例如下:

lib\storage\path_provider.dart

/*
 * path_provider - 用于获取不同平台的本地存储的路径
 *
 * 在 pubspec.yaml 中做如下配置,然后 flutter pub get
 * dev_dependencies:
 *   flutter_test:
 *     sdk: flutter
 *   path_provider: ^2.0.0
 *
 *
 * 常用的目录如下:
 * getTemporaryDirectory() - ios 的 NSCachesDirectory; android 的 getCacheDir()
 * getApplicationSupportDirectory() - ios 的 NSApplicationSupportDirectory; android 的 getFilesDir()
 * getApplicationDocumentsDirectory() - ios 的 NSDocumentDirectory; android 的 getDataDir() + "/app_flutter/"
 *
 * 不常用的目录如下:
 * getLibraryDirectory() - 获取 ios 的 Library 目录
 * getExternalStorageDirectory(), getExternalStorageDirectories(), getExternalCacheDirectories() - 获取 android 的外部存储相关的目录
 * getDownloadsDirectory() - 获取桌面程序的下载目录
 */

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

import '../helper.dart';

class PathProviderDemo extends StatefulWidget {
  const PathProviderDemo({Key? key}) : super(key: key);

  @override
  _PathProviderDemoState createState() => _PathProviderDemoState();
}

class _PathProviderDemoState extends State<PathProviderDemo> {
  Future<Directory?>? _tempDirectory;
  Future<Directory?>? _appSupportDirectory;
  Future<Directory?>? _appDocumentsDirectory;

  Widget _buildDirectory(BuildContext context, AsyncSnapshot<Directory?> snapshot) {
    var result = "";
    if (snapshot.connectionState == ConnectionState.done) {
      if (snapshot.hasError) {
        result = 'error: ${snapshot.error}';
      } else if (snapshot.hasData) {
        result = 'path: ${snapshot.data!.path}';
      } else {
        result = 'path unavailable';
      }
    }
    return MyTextSmall(result);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("title"),),
      backgroundColor: Colors.orange,
      body: Center(
        child: ListView(
          children: [
            Column(
              children: [
                ElevatedButton(
                  onPressed: () {
                    setState(() {
                      /// ios 地址类似 xxx/Library/Caches
                      /// android 地址类似 /data/user/0/packagename/cache
                      _tempDirectory = getTemporaryDirectory();
                    });
                  },
                  child: const Text('getTemporaryDirectory()',),
                ),
                FutureBuilder<Directory?>(
                  future: _tempDirectory,
                  builder: _buildDirectory,
                ),
              ],
            ),
            const SizedBox(height: 16,),
            Column(
              children: [
                ElevatedButton(
                  onPressed: () {
                    setState(() {
                      /// ios 地址类似 xxx/Library/Application Support
                      /// android 地址类似 /data/user/0/packagename/files
                      _appSupportDirectory = getApplicationSupportDirectory();
                    });
                  },
                  child: const Text('getApplicationSupportDirectory()',),
                ),
                FutureBuilder<Directory?>(
                  future: _appSupportDirectory,
                  builder: _buildDirectory,
                ),
              ],
            ),
            const SizedBox(height: 16,),
            Column(
              children: [
                ElevatedButton(
                  onPressed: () {
                    setState(() {
                      /// ios 地址类似 xxx/Documents
                      /// android 地址类似 /data/user/0/packagename/app_flutter
                      _appDocumentsDirectory = getApplicationDocumentsDirectory();
                    });
                  },
                  child: const Text('getApplicationDocumentsDirectory()',),
                ),
                FutureBuilder<Directory?>(
                  future: _appDocumentsDirectory,
                  builder: _buildDirectory,
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

源码 https://github.com/webabcd/flutter_demo
作者 webabcd

标签:存储,const,ios,provider,path,android,flutter
From: https://www.cnblogs.com/webabcd/p/flutter_lib_storage_path_provider.html

相关文章

  • 玩转云端 | 解密!业内首款存储资源盘活系统如何炼成?
     2023年4月26日-30日,第六届数字中国建设峰会·云生态大会在福州举办。会上展示的一款创新性存储产品格外亮眼,那就是中国电信天翼云率先发布的,国内首款存储资源盘活系统HBlock。 HBlock是纯软件全用户态的存储控制器,可以把不同配置的服务器与现网服务器中闲置的存储空间全部......
  • 用最低成本实现高性能写入、查询、存储,揭秘 TDengine 技术实现逻辑
    从《写入性能:TDengine最高达到InfluxDB的10.3倍,TimeScaleDB的6.74倍》、《查询性能:TDengine最高达到了InfluxDB的37倍、TimescaleDB的28.6倍》两篇文章中,我们发现,TDengine(TimeSeriesDatabase)不仅在写入和查询性能上超越了InfluxDB和TimescaleDB,在数据处理过......
  • 海量数据监控如何选择存储方案? 看转转、得物这些企业是怎么做的
    对于互联网业务而言,为保证服务的稳定运行,就要时刻关注服务器、服务调用、网络状况等各项指标,单是监控数据就存在非常大的量级。为了应对这种挑战,结合监控数据的特点,许多企业开始选择符合业务需求的时序数据库(TimeSeriesDatabase),以便更好地支持运维监控。转转xTDengine“使用......
  • 河北稳控科技多通道振弦传感器无线采集仪存储数据如此导出
    河北稳控科技多通道振弦传感器无线采集仪存储数据如此导出 1内部存储器设备工作过程中,定时采集到的数据保存于设备内部文本文件内,可使用专用工具“DSTForVSxxx”通过RS232接口进行文件下载,操作十分简单,如下图示。 2外部存储器-U盘每次开机时,设备会自动检测是否......
  • Springboot 系列 (30) - Springboot+HBase 大数据存储(八)| Springboot Client/Server
    Kerberos(SecureNetworkAuthenticationSystem,网络安全认证系统),是一种网络认证协议,其设计目标是通过密钥系统为Client/Server提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被......
  • PostgreSQL存储大量base64
           PostgreSQL存储大量base64原创七月流火紧到说2022-05-2809:00发表于四川背景现场反馈数据库pg_wal日志有2.3TB,占满了磁盘空间,数据库处于宕机状态。并且数据库没有做备份。日志堆积的主要原因是配置的归档失败了。排查过程中发现主要以下几......
  • Error creating bean with name ‘dataSource‘ defined in class path resource解决
    原因是导入了jdbc的依赖,使用@Configuration注解向spring注入了dataSourcebean。但是因为工程中没有关于dataSource相关的配置信息,当spring创建dataSourcebean因缺少相关的信息就会报错。有两个办法:办法1:去除spring-boot-starter-jdbc的依赖或者mybatis的依赖办法2:在Sprin......
  • [BUG]multiprocessing/connection.py OSError:AF_UNIX path too long EOFError
       解决方法,当前代码的路径太长了,把路径变得短一些就可以了......
  • Android 数据存储
    概述文件存储特点:openFileInput()和openFileOutput()读取设备上的文件。SharedPreferences特点:以XML格式将数据存储到设备。SQLite数据库特点:运算速度快,占用资源少,还支持基本SQL语法。ContentProvider特点:应用程序之间的数据交换,可以将自己的数据共享给其他应用......
  • npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path C:\Program Files\node
    npm项目初始化代码npminit--yesidea代码安装npmnpmiexperss我输入的时候报错了,如下图所示没关系,只需要手动打开C盘的路径文件找到这个文件,并且把他Ctrl+D删除掉即可之后在运行这串代码就可以啦明显成功了......