插件介绍
open_filex 是一个功能强大的 Flutter 插件,用于在不同平台上调用原生应用打开指定路径的文件。它支持 iOS、Android、PC、Web 以及 HarmonyOS(鸿蒙)平台,为开发者提供了统一的文件打开接口。
该插件是 open_file 插件的一个分支,主要修复了以下问题并增强了功能:
- 移除了 Android 中的
REQUEST_INSTALL_PACKAGES权限,以符合 Google Play 发布政策 - 更新了 ffi 依赖到 2.0.1+
- 增强了对 Android 13 中细粒度媒体权限的支持
- 修复了 Android 中插件生命周期管理问题
- 修复了 iOS 中的 viewController 识别问题
- 修复了参数解析问题
- 将 Android build.gradle 仓库中的 JCenter 替换为 MavenCentral
- 支持 Gradle 8+
- 支持 iOS 嵌入式 Flutter
快速开始
1. 引入依赖
由于这是一个自定义修改版本,需要通过 Git 方式引入依赖。在项目的 pubspec.yaml 文件中添加以下配置:
dependencies:
flutter:
sdk: flutter
# 引入 open_filex 插件(鸿蒙适配版)
open_filex:
git:
url: "https://github.com/your-repo/fluttertpc_open_filex.git" # 替换为实际的 Git 仓库地址
ref: master # 可以指定分支或标签
然后运行 flutter pub get 命令获取依赖。
2. 导入包
在需要使用的 Dart 文件中导入 open_filex 包:
import 'package:open_filex/open_filex.dart';
API 调用示例
open_filex 插件提供了简单直观的 API,核心功能是通过 OpenFilex.open() 方法实现的。
基本用法
// 打开指定路径的文件
OpenResult result = await OpenFilex.open("/path/to/your/file.pdf");
// 处理打开结果
if (result.type == ResultType.done) {
print("文件打开成功");
} else {
print("文件打开失败: ${result.message}");
}
指定文件类型
在某些平台上,您可以指定文件类型以帮助系统选择合适的应用程序:
// 打开 PDF 文件并指定类型
await OpenFilex.open(
"/path/to/your/file.pdf",
type: "application/pdf",
);
iOS 平台指定 UTI
在 iOS 平台上,您可以使用 UTI(Uniform Type Identifier)来指定文件类型:
// 在 iOS 上打开图片文件
await OpenFilex.open(
"/path/to/your/image.jpg",
uti: "public.jpeg",
);
Linux 平台指定桌面环境
在 Linux 平台上,您可以指定桌面环境:
// 在 Linux GNOME 环境下打开文件
await OpenFilex.open(
"/path/to/your/file.txt",
linuxDesktopName: "gnome",
);
鸿蒙平台兼容性说明
open_filex 插件已经适配了 HarmonyOS 平台,在鸿蒙设备上使用时无需额外配置,API 调用方式与其他平台保持一致。
插件内部通过检测操作系统类型 Platform.operatingSystem == 'ohos' 来自动适配鸿蒙平台,并调用鸿蒙原生的文件打开能力。
常见问题与解决方案
Android 平台 FileProvider 冲突
当与其他插件在 FileProvider 配置上发生冲突时,可以在 AndroidManifest.xml 中添加以下配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="xxx.xxx.xxxxx">
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"
tools:replace="android:resource" />
</provider>
</application>
</manifest>
并在 /android/app/src/main/res/xml/filepaths.xml 中添加:
<paths>
<external-path name="external-path" path="."/>
<external-cache-path name="external-cache-path" path="."/>
<external-files-path name="external-files-path" path="."/>
<files-path name="files_path" path="."/>
<cache-path name="cache-path" path="."/>
<root-path name="root" path="."/>
</paths>
Android 依赖版本冲突
当遇到 Android 依赖版本冲突时,可以在 /android/build.gradle 中添加:
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "27.1.1"
}
}
}
}
总结
open_filex 是一个功能完善、跨平台的 Flutter 文件打开插件,它不仅支持主流的 iOS、Android、Web 和 PC 平台,还特别适配了 HarmonyOS 系统。通过简单的 API 调用,开发者可以轻松实现调用原生应用打开文件的功能,为用户提供良好的文件交互体验。
该插件的主要优势包括:
- 统一的跨平台 API
- 支持多种文件类型
- 鸿蒙平台原生适配
- 解决了原 open_file 插件的诸多问题
- 良好的兼容性和稳定性
无论是开发普通的文件浏览应用,还是需要在应用中打开各种格式文件的场景,open_filex 都是一个值得选择的插件。
244

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



