'How to add a File Picker plugin in Flutter?

I am creating a Flutter project in which, I have a piece of data (JSON) that I want to Import from and Export to a location the user wants to. In order to achieve this, I require a File Picker plugin in Flutter. Now, I searched the Dart Packages repository for "file picker" but didn't find one.

Is there a way to get a File Picker that looks like this:

or even this...

The first screenshot is preferable for me as it allows file selection from different sources (like Drive).

Also, since I want to Export the data, I might want a Folder Picker too. ;)
But, if there is any other alternative to Folder Picker. I'd be happy to know...



Solution 1:[1]

I've created a file_picker plugin some time ago in order to make it possible to pick (both on iOS and Android) absolute paths and then loaded it with Flutter.

You can check it here: https://pub.dev/packages/file_picker

Solution 2:[2]

I used file_picker library to pick files. you can use this for pick images as well.

Future getPdfAndUpload(int position) async {

    File file = await FilePicker.getFile(
      type: FileType.custom,
      allowedExtensions: ['pdf','docx'], //here you can add any of extention what you need to pick
    );

    if(file != null) {

      setState(() {

          file1 = file; //file1 is a global variable which i created
     
      });

    }
  }

here file_picker flutter library.

Solution 3:[3]

I'm in the exact same boat as you, haha!

I noticed documents_picker 0.0.2. It allows the user to pick multiple files, and it seems to fit the need!

check it out: https://pub.dartlang.org/packages/documents_picker#-readme-tab-

Solution 4:[4]

Here's a better document picker. It looks like the native document picker from the Storage Access Framework, which is what you have in your picture. flutter_document_picker

Solution 5:[5]

Just found the FileSelector plugin from flutter.dev. Compatible with MacOS, Windows and Web.

From its pub.dev page:

Open a single file

final typeGroup = XTypeGroup(label: 'images', extensions: ['jpg', 'png']);
final file = await openFile(acceptedTypeGroups: [typeGroup]);

Open multiple files at once

final typeGroup = XTypeGroup(label: 'images', extensions: ['jpg', 'png']);
final files = await openFiles(acceptedTypeGroups: [typeGroup]);

Saving a file

final path = await getSavePath();
final name = "hello_file_selector.txt";
final data = Uint8List.fromList("Hello World!".codeUnits);
final mimeType = "text/plain";
final file = XFile.fromData(data, name: name, mimeType: mimeType);
await file.saveTo(path);

MacOS: Provide file read or/and write privileges

On target MacOS please provide sufficient rights using Xcode:

Set file read/write privileges using Xcode

In case you don't provide file read or/and write permissions, the call to

final XFile? file =
    await openFile(acceptedTypeGroups: <XTypeGroup>[typeGroup]);

neither shows anything not returns.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kab Agouda
Solution 2 Supun Dewapriya
Solution 3 Kael Kirk
Solution 4 ThinkDigital
Solution 5