1

I want to export a save file so the user can later import it into the app again later, but how do I allow exporting to a directory outside the app dir (/Android/com.app/files)

if (!(await Permission.storage.request().isGranted)) return;

final String? exportPath = await FilePicker.platform.getDirectoryPath();

if (exportPath == null) return;

File exportFile = await File(
  "$exportPath/zs_tracker_data.sav",
).create(recursive: true);

This code is backed by these gradle properties:

android.useAndroidX=true
android.enableJetifier=true

With compileSdkVersion 33 selected, and these permissions:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

All of these above allows me to get a path, and then get this prompt:Allow Access In Dir Prompt

However, even when I press 'Allow', I am not allowed to touch that directory and get: Unhandled Exception: FileSystemException: Cannot create file, path = '/storage/emulated/0/Backups/zs_tracker_data.sav' (OS Error: Operation not permitted, errno = 1)

I've considered allowing MANAGE_EXTERNAL_STORAGE, but then my app won't be allowed on Play Store, since the only reasons it needs storage permissions are for creating backups and importing backups. I've also seen this post: Flutter read/write to external storage with Android SDK 30+, but the answer blows over my head completely and seems horribly over complex for my simple backup export/importing...

How do I go about this in a decently simple way? I just want to be able to save the exported file somewhere where the user can easily find it

Netsu
  • 1,399
  • 1
  • 7
  • 18

1 Answers1

1

Maybe use a totally different approach which doesn't require any permissions. Use sharing to allow a user to choose whatever a destination she/he desires. For example using share_plus plugin:

Share.shareFiles(['<path to file>'], text: 'Export file');
user18309290
  • 5,777
  • 2
  • 4
  • 22
  • Wow... That's certainly one way to go about it! But I think it will be great for now, thank you ;) – Netsu Jul 17 '22 at 18:42