我们在上一章回中介绍了"如何实现本地存储"相关的内容,本章回中将介绍如何实现文件存储.闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在上一章回中介绍的本地存储只能存储dart语言中基本类型的数值,如果遇到大的文件如何处理呢?本章回将介绍如何实现文件存储。在Flutter中文件存储相关的
接口都在io库中,该库中常用的类是Directory和File。本章回中将详细介绍它们的使用方法。
实现方法
- 获取本地存储路径;
- 在路径中创建文件;
- 在文件中读写数据;
上面的步骤看着简单,实际上操作起来比较复杂,本章回先介绍第1个步骤:获取本地存储路径,下一章回再介绍另外两个步骤相关的知识。本地存储路径在不同的平台上
有不同的API接口,而且获取到的路径也不一样.难道我们要针对不同平台写不同的代码?不需要,Flutter官方已经想到了这个问题,并且帮助开发人员解决了此问题。
它提供了path_provider包,通过该包可以使用统一的API接口实现跨平台的功能。下面是该包的使用方法: - 在yaml配置文件中导入包;
- 获取本地目录,目录的类型是Future;
- 从获取到的目录中获取文件路径,路径是绝对路径;
这些步骤看着简单,但是不容易理解,下面我们将通过示例代码来演示。这样可以方便大家理解上面的使用方法;
示例代码
///对应目录: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
接口给开发者使用,不同的接口可以获取到不同的路径,我在这里就不一一介绍了,大家可以参考官方文档。
看官们,关于"如何实现文件存储"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!