一、概述
遇到需求是将配置保存到本地,除了数据存储shared_preferences外最合适的就是创建一个文件来保存数据,这样不用担心数据丢失。
二、准备
首先需要添加 path_provider
这个第三方插件库,这个插件是用来获取目录的,该插件为我们提供了多种获取不同类型目录的方法。
1.添加依赖
在pubspec.yaml文件下添加
dependencies:
path_provider: ^2.0.2
使用的时候添加引用即可
import 'package:path_provider/path_provider.dart';
2.方法介绍
getTemporaryDirectory()
:获取临时文件路径(IOS和安卓通用)getApplicationSupportDirectory()
:获取应用支持目录(IOS和安卓通用)getApplicationDocumentsDirectory()
:获取应用文件目录(IOS和安卓通用),针对 Android 设备的 AppDate 目录,iOS 设备的 NSDocumentDirectory 目录getLibraryDirectory()
:获取应用持久存储目录路径(仅IOS可用)getExternalStorageDirectory()
: 获取存储卡目录(仅安卓可用)getExternalCacheDirectories()
:获取外部缓存目录(仅安卓可用)getDownloadsDirectory()
:获取下载目录(仅桌面可用)
三、对应方法
保存文件除了上述的目录插件对应的方法,还需要io数据编写方法的配合。正常思路是:1.获取文件目录;2.获取文件,无则创建;3.保存内容到文件中。下面展示具体代码。
/// 获取文档目录
Future<String> _localfilePath() async{
Directory tempDir = await getTemporaryDirectory();
return tempDir.path;
}
/// 获取文档
Future<File> _localfile() async{
String path = await _localfilePath();
print('$path/settting.txt');
return new File('$path/settting.txt');
}
/// 保存内容到文本
void _saveFile(String val) async{
try{
File file = await _localfile();
IOSink sink = file.openWrite(mode: FileMode.append);
sink.write(val);
sink.close();
}
catch(e){
// 写入错误
ToastUtil.print(e);
}
}
上面的方法中目录用的是getTemporaryDirectory()
临时目录,这个是随着软件的删除而消失的,测试发现没有root的手机是没法找到的,跟window中的AppData文件夹类似,默认隐藏。