Flutter中如何将Base64字符串保存为PDF至手机本地存储?
实现PDF从私有目录保存到手机本地存储
要把APP私有目录中的PDF保存到手机公共存储(比如下载文件夹),可以按以下步骤实现:
1. 添加依赖包
在pubspec.yaml中添加所需依赖:
dependencies: flutter: sdk: flutter path_provider: ^2.1.1 permission_handler: ^10.2.0
执行flutter pub get完成依赖安装。
2. 配置权限
Android端
在android/app/src/main/AndroidManifest.xml中添加权限声明:
<!-- Android 10及以下版本需要 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Android 13+ 版本需要 --> <uses-permission android:name="android.permission.READ_MEDIA_DOCUMENTS" />
iOS端
在ios/Runner/Info.plist中添加存储权限说明:
<key>NSDownloadsDirectoryUsageDescription</key> <string>需要访问下载目录以保存PDF文件</string>
3. 实现保存逻辑
以下是完整的保存代码示例:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; Future<void> savePdfToPublicStorage() async { // 1. 检查并申请存储权限 PermissionStatus status; if (Platform.isAndroid) { final androidSdk = await (await DeviceInfoPlugin().androidInfo).version.sdkInt; status = androidSdk >= 33 ? await Permission.manageExternalStorage.request() : await Permission.storage.request(); } else { status = await Permission.storage.request(); } if (!status.isGranted) { // 权限未通过,可添加提示用户开启权限的逻辑 return; } // 2. 获取公共存储的下载目录路径 Directory? downloadsDir; if (Platform.isAndroid) { downloadsDir = await getExternalPublicDirectory(DirectoryDownloads); } else if (Platform.isIOS) { // iOS沙盒限制严格,先保存到应用文档目录,如需系统下载目录需用分享功能 downloadsDir = await getApplicationDocumentsDirectory(); } if (downloadsDir == null) return; // 3. 定义原文件和目标文件路径 const originalPath = '/data/user/0/com.example.flutter_pdf_proj/app_flutter/example.pdf'; final targetPath = '${downloadsDir.path}/example.pdf'; // 4. 读取原PDF文件字节 final originalFile = File(originalPath); if (!await originalFile.exists()) return; final pdfBytes = await originalFile.readAsBytes(); // 5. 写入目标文件 final targetFile = File(targetPath); await targetFile.writeAsBytes(pdfBytes); // 保存成功后的提示逻辑 print('PDF已保存至:$targetPath'); }
注意事项
- Android 13+ 写入公共下载目录无需特殊权限,直接使用
getExternalPublicDirectory即可,部分定制化设备可能需额外适配。 - iOS 系统中,若需将文件保存到系统级下载目录,建议通过分享功能让用户手动选择保存位置,或使用文档选择器类插件实现。
- 保存完成后,可通过手机自带的文件管理器在对应目录找到该PDF。
内容的提问来源于stack exchange,提问作者Siva M
相关产品推荐
相关产品推荐

