showFilePicker static method

Future<void> showFilePicker({
  1. required dynamic action(
    1. List<FileData>
    ),
  2. FileType fileType = FileType.any,
  3. bool allowMultiple = false,
  4. String? initialDirectory,
  5. String? dialogTitle,
  6. bool allowCompression = true,
  7. bool withReadStream = false,
  8. bool lockParentWindow = false,
  9. List<String>? allowedExtensions,
})

Implementation

static Future<void> showFilePicker({
  required final Function(List<FileData>) action,
  final FileType fileType = FileType.any,
  final bool allowMultiple = false,
  final String? initialDirectory,
  final String? dialogTitle,
  final bool allowCompression = true,
  final bool withReadStream = false,
  final bool lockParentWindow = false,
  final List<String>? allowedExtensions,
}) async {
  try {
    final FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: fileType,
      allowMultiple: allowMultiple,
      allowedExtensions: allowedExtensions,
    );

    if (result == null) return;

    final List<FileData> files = await Future.wait(
      result.files.map((PlatformFile file) async {
        if (kIsWeb) {
          return FileData(
            bytes: file.bytes,
            extension: file.extension,
          );
        } else {
          return FileData(
            path: file.path,
            bytes: await File(file.path!).readAsBytes(),
            extension: file.extension ?? path.extension(file.path!),
          );
        }
      }),
    );

    action(files);
  } catch (e) {
    debugPrint("File picker error: $e");
    action(<FileData>[]);
  }
}