Flutter中如何让用户选择备份文件的保存/创建位置
解决方案
要实现让用户自行选择备份文件的保存位置,你可以借助file_picker这个Flutter包调用系统文件选择器,让用户指定目标目录。以下是具体修改步骤:
1. 添加依赖
在pubspec.yaml的dependencies节点中加入:
file_picker: ^6.1.1
执行flutter pub get完成依赖安装。
2. 修改备份函数
替换原有的backupDB函数为以下代码:
backupDB() async { // 申请存储权限 var status = await Permission.manageExternalStorage.status; if (!status.isGranted) { await Permission.manageExternalStorage.request(); } var status1 = await Permission.storage.status; if (!status1.isGranted) { await Permission.storage.request(); } try { // 唤起系统目录选择界面 String? selectedDirectory = await FilePicker.platform.getDirectoryPath(); if (selectedDirectory == null) { // 用户取消选择 print('用户取消选择保存目录'); return; } // 源数据库文件路径 File ourDBFile = File('/data/user/0/com.example.demo_sql_full/databases/Data.db'); // 拼接目标文件路径 String targetPath = '$selectedDirectory/Data.db'; // 执行文件复制 await ourDBFile.copy(targetPath); print('备份完成,文件已保存至: $targetPath'); } catch (e) { print('备份失败: ${e.toString()}'); } }
关键说明
FilePicker.platform.getDirectoryPath()会唤起系统原生的文件夹选择界面,支持用户自由选择备份存储位置;- 增加了用户取消选择的判断逻辑,避免后续代码执行报错;
- 直接用用户选中的目录拼接目标文件名,确保备份文件存到指定位置;
- 针对Android 13及以上版本,
manageExternalStorage权限可根据目标SDK版本调整,部分场景下无需申请该权限。
内容的提问来源于stack exchange,提问作者Dat Minh
相关产品推荐
相关产品推荐

