
1. path_provider插件介绍
path_provider是Flutter生态中最常用的文件系统路径管理插件之一,它提供了获取设备上常用文件系统路径的API,如临时目录、应用文档目录等。这些路径对于需要在本地存储数据的应用程序来说至关重要。
1.1 主要功能
- 获取临时目录路径:用于存储临时文件,系统可能会在需要时删除这些文件
- 获取应用文档目录路径:用于存储应用的持久化数据,这些数据会跟随应用的卸载而删除
- 获取应用支持目录路径:用于存储应用的支持文件,如配置文件、日志文件等
- 获取外部存储目录路径:用于存储需要与其他应用共享的文件(部分平台支持)
1.2 OpenHarmony适配版本
path_provider插件已完成OpenHarmony平台的适配,通过自定义修改并以Git仓库形式提供。该适配版本保持了与官方版本一致的API接口,确保开发者可以无缝迁移代码。
2. 环境准备
在使用path_provider插件之前,需要先搭建Flutter OpenHarmony开发环境。
2.1 安装开发工具
- 安装DevEco Studio:从OpenHarmony开发套件官网下载最新版DevEco Studio
- 安装JDK 17:从Oracle官网或OpenJDK官网下载并安装JDK 17
- 下载OpenHarmony版Flutter:
git clone https://atomgit.com/openharmony-tpc/flutter_flutter.git git checkout -b dev origin/dev
2.2 配置环境变量
根据您的Shell类型(bash或zsh),编辑相应的配置文件:
# 国内镜像(可选)
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
# Flutter SDK路径
export PATH=/path/to/flutter_flutter/bin:$PATH
# OpenHarmony SDK
export TOOL_HOME=/Applications/DevEco-Studio.app/Contents # mac环境
export DEVECO_SDK_HOME=$TOOL_HOME/sdk
export PATH=$TOOL_HOME/tools/ohpm/bin:$PATH
export PATH=$TOOL_HOME/tools/hvigor/bin:$PATH
export PATH=$TOOL_HOME/tools/node/bin:$PATH
执行source ~/.bash_profile或source ~/.zshrc使配置生效。
2.3 验证环境
执行以下命令验证环境配置是否正确:
flutter doctor -v
确保Flutter与OpenHarmony相关项都显示为"OK"。
3. 引入path_provider插件
由于OpenHarmony版的path_provider是自定义修改版本,需要以Git形式从AtomGit引入。
3.1 创建Flutter项目
首先,创建一个支持OpenHarmony平台的Flutter项目:
# 创建仅支持OpenHarmony平台的项目
flutter create --platforms ohos path_provider_demo
# 进入项目目录
cd path_provider_demo
3.2 在pubspec.yaml中添加依赖
在项目的pubspec.yaml文件中添加path_provider依赖:
dependencies:
flutter:
sdk: flutter
# 以Git形式引入适配OpenHarmony的path_provider包
path_provider:
git:
url: "https://atomgit.com/"
path: "packages/path_provider/path_provider"
3.3 获取依赖
执行以下命令获取依赖:
flutter pub get
4. 使用path_provider API
path_provider插件提供了一组简单易用的API,用于获取设备上的各种文件路径。
4.1 导入包
在需要使用path_provider的Dart文件中,导入包:
import 'package:path_provider/path_provider.dart';
4.2 获取临时目录
临时目录用于存储临时文件,系统可能会在需要时删除这些文件:
Future<String> getTemporaryPath() async {
final directory = await getTemporaryDirectory();
return directory.path;
}
4.3 获取应用文档目录
应用文档目录用于存储应用的持久化数据,这些数据会跟随应用的卸载而删除:
Future<String> getApplicationDocumentsPath() async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
4.4 获取应用支持目录
应用支持目录用于存储应用的支持文件,如配置文件、日志文件等:
Future<String> getApplicationSupportPath() async {
final directory = await getApplicationSupportDirectory();
return directory.path;
}
4.5 获取外部存储目录
外部存储目录用于存储需要与其他应用共享的文件(部分平台支持):
Future<String?> getExternalStoragePath() async {
final directory = await getExternalStorageDirectory();
return directory?.path;
}
5. 完整示例
下面是一个完整的示例,演示如何在Flutter OpenHarmony应用中使用path_provider插件:
5.1 main.dart
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
Widget build(BuildContext context) {
return MaterialApp(
title: 'Path Provider Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const PathProviderScreen(),
);
}
}
class PathProviderScreen extends StatefulWidget {
const PathProviderScreen({Key? key}) : super(key: key);
State<PathProviderScreen> createState() => _PathProviderScreenState();
}
class _PathProviderScreenState extends State<PathProviderScreen> {
String _temporaryPath = '未获取';
String _documentsPath = '未获取';
String _supportPath = '未获取';
String _externalStoragePath = '未获取';
Future<void> _getAllPaths() async {
// 获取临时目录
final tempDir = await getTemporaryDirectory();
// 获取应用文档目录
final docsDir = await getApplicationDocumentsDirectory();
// 获取应用支持目录
final supportDir = await getApplicationSupportDirectory();
// 获取外部存储目录
final externalDir = await getExternalStorageDirectory();
setState(() {
_temporaryPath = tempDir.path;
_documentsPath = docsDir.path;
_supportPath = supportDir.path;
_externalStoragePath = externalDir?.path ?? '不支持';
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Path Provider Demo')),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ElevatedButton(
onPressed: _getAllPaths,
child: const Text('获取所有路径'),
),
const SizedBox(height: 20),
Text('临时目录: $_temporaryPath'),
const SizedBox(height: 10),
Text('应用文档目录: $_documentsPath'),
const SizedBox(height: 10),
Text('应用支持目录: $_supportPath'),
const SizedBox(height: 10),
Text('外部存储目录: $_externalStoragePath'),
],
),
),
);
}
}
6. 构建与运行
6.1 构建HAP包
执行以下命令构建HAP包:
# 构建Debug版本
flutter build hap --debug
# 构建Release版本
flutter build hap --release
6.2 运行到设备
执行以下命令将应用运行到OpenHarmony设备或模拟器上:
# 运行到指定设备
flutter run --debug -d device_id
# 运行到默认设备
flutter run --debug
7. 注意事项
-
权限配置:如果需要访问外部存储目录,可能需要在OpenHarmony应用的配置文件中添加相应的权限。
-
路径差异:不同平台的文件系统路径结构可能有所不同,建议使用path_provider提供的API获取路径,而不是硬编码路径。
-
数据持久化:应用文档目录和应用支持目录中的数据会跟随应用的卸载而删除,如果需要更持久的数据存储,可以考虑使用其他存储方案。
8. 总结
path_provider插件是Flutter生态中非常实用的文件系统路径管理工具,已经完成了OpenHarmony平台的适配。通过本文的介绍,您可以了解到:
- 如何搭建Flutter OpenHarmony开发环境
- 如何以Git形式从AtomGit引入适配OpenHarmony的path_provider包
- 如何使用path_provider提供的API获取设备上的各种文件路径
- 如何构建和运行使用path_provider的Flutter OpenHarmony应用
path_provider插件的适配版本保持了与官方版本一致的API接口,确保开发者可以无缝迁移代码,快速开发支持OpenHarmony平台的Flutter应用。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.youkuaiyun.com
1313

被折叠的 条评论
为什么被折叠?



