Flutter文件打开插件open_filez的使用
Flutter文件打开插件open_filez的使用
这是一个可以在Flutter中调用原生应用打开文件的插件,支持iOS(DocumentInteraction)、Android(intent)、PC(ffi)和Web(dart:html)。
使用方法
要使用此插件,在pubspec.yaml
文件中添加以下依赖:
dependencies:
open_filez: ^lastVersion
示例代码
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:open_filez/open_filez.dart';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
var _openResult = 'Unknown';
Future<void> openFile() async {
// 文件路径
const filePath = '/storage/emulated/0/Download/dummy.pdf';
// 打开文件并获取结果
final result = await OpenFilez.open(filePath);
// 更新UI显示结果
setState(() {
_openResult = "type=${result.type} message=${result.message}";
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('open result: $_openResult\n'),
TextButton(
onPressed: openFile,
child: const Text('Tap to open file'),
),
],
),
),
),
);
}
}
支持的文件类型
Android
{
".3gp": "video/3gpp",
".torrent": "application/x-bittorrent",
".kml": "application/vnd.google-earth.kml+xml",
".gpx": "application/gpx+xml",
".csv": "application/vnd.ms-excel",
".asf": "video/x-ms-asf",
".avi": "video/x-msvideo",
".bin": "application/octet-stream",
".bmp": "image/bmp",
".c": "text/plain",
".class": "application/octet-stream",
".conf": "text/plain",
".cpp": "text/plain",
".doc": "application/msword",
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".xls": "application/vnd.ms-excel",
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".exe": "application/octet-stream",
".gif": "image/gif",
".gtar": "application/x-gtar",
".gz": "application/x-gzip",
".h": "text/plain",
".htm": "text/html",
".html": "text/html",
".jar": "application/java-archive",
".java": "text/plain",
".jpeg": "image/jpeg",
".jpg": "image/jpeg",
".js": "application/x-javascript",
".log": "text/plain",
".m3u": "audio/x-mpegurl",
".m4a": "audio/mp4a-latm",
".m4b": "audio/mp4a-latm",
".m4p": "audio/mp4a-latm",
".m4u": "video/vnd.mpegurl",
".m4v": "video/x-m4v",
".mov": "video/quicktime",
".mp2": "audio/x-mpeg",
".mp3": "audio/x-mpeg",
".mp4": "video/mp4",
".mpc": "application/vnd.mpohun.certificate",
".mpe": "video/mpeg",
".mpeg": "video/mpeg",
".mpg": "video/mpeg",
".mpg4": "video/mp4",
".mpga": "audio/mpeg",
".msg": "application/vnd.ms-outlook",
".ogg": "audio/ogg",
".pdf": "application/pdf",
".png": "image/png",
".pps": "application/vnd.ms-powerpoint",
".ppt": "application/vnd.ms-powerpoint",
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
".prop": "text/plain",
".rc": "text/plain",
".rmvb": "audio/x-pn-realaudio",
".rtf": "application/rtf",
".sh": "text/plain",
".tar": "application/x-tar",
".tgz": "application/x-compressed",
".txt": "text/plain",
".wav": "audio/x-wav",
".wma": "audio/x-ms-wma",
".wmv": "audio/x-ms-wmv",
".wps": "application/vnd.ms-works",
".xml": "text/plain",
".z": "application/x-compress",
".zip": "application/x-zip-compressed",
"": "*/*"
}
如果遇到与其他插件冲突的FileProvider
问题,需要在/android/app/src/main/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
中添加以下代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<external-path name="external_storage_directory" path="." />
</resources>
如果遇到Android依赖com.android.support:appcompat-v7
版本不一致导致的编译错误,可以添加以下代码到/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"
}
}
}
}
iOS
对于iOS,可以使用UTI(Uniform Type Identifier)来识别文件类型。以下是一些常见的文件类型映射:
{
".rtf": "public.rtf",
".txt": "public.plain-text",
".html": "public.html",
".htm": "public.html",
".xml": "public.xml",
".tar": "public.tar-archive",
".gz": "org.gnu.gnu-zip-archive",
".gzip": "org.gnu.gnu-zip-archive",
".tgz": "org.gnu.gnu-zip-tar-archive",
".jpg": "public.jpeg",
".jpeg": "public.jpeg",
".png": "public.png",
".avi": "public.avi",
".mpg": "public.mpeg",
".mpeg": "public.mpeg",
".mp4": "public.mpeg-4",
".3gpp": "public.3gpp",
".3gp": "public.3gpp",
".mp3": "public.mp3",
".zip": "com.pkware.zip-archive",
".gif": "com.compuserve.gif",
".bmp": "com.microsoft.bmp",
".ico": "com.microsoft.ico",
".doc": "com.microsoft.word.doc",
".xls": "com.microsoft.excel.xls",
".ppt": "com.microsoft.powerpoint.ppt",
".wav": "com.microsoft.waveform-audio",
".wm": "com.microsoft.windows-media-wm",
".wmv": "com.microsoft.windows-media-wmv",
".pdf": "com.adobe.pdf"
}
更多关于Flutter文件打开插件open_filez的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文件打开插件open_filez的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
open_filez
是一个 Flutter 插件,用于在移动设备上打开文件。它支持多种文件类型,包括 PDF、图像、音频、视频、文档等。该插件是根据 Flutter
的 open_file
插件优化的版本。
以下是 open_filez
的基本使用方法:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 open_filez
插件的依赖:
dependencies:
flutter:
sdk: flutter
open_filez: ^3.0.0 # 请根据最新版本进行更新
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 open_filez
插件:
import 'package:open_filez/open_filez.dart';
3. 打开文件
使用 OpenFilez.open
方法来打开文件。你需要传入文件的路径:
void openFile(String filePath) async {
try {
await OpenFilez.open(filePath);
} catch (e) {
print("Error opening file: $e");
}
}
4. 示例代码
以下是一个完整的示例,展示如何在 Flutter 应用中使用 open_filez
插件打开文件:
import 'package:flutter/material.dart';
import 'package:open_filez/open_filez.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Open Filez Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
openFile('/storage/emulated/0/Download/example.pdf'); // 替换为你的文件路径
},
child: Text('Open File'),
),
),
),
);
}
void openFile(String filePath) async {
try {
await OpenFilez.open(filePath);
} catch (e) {
print("Error opening file: $e");
}
}
}
5. 权限处理
在 Android 上,你可能需要请求存储权限才能访问文件。可以使用 permission_handler
插件来请求权限:
dependencies:
permission_handler: ^10.0.0 # 请根据最新版本进行更新
然后,在打开文件之前请求权限:
import 'package:permission_handler/permission_handler.dart';
void requestStoragePermission() async {
if (await Permission.storage.request().isGranted) {
openFile('/storage/emulated/0/Download/example.pdf');
} else {
print("Permission denied");
}
}