pickFilesCore static method

Future<List<FcFilePickerPath>?> pickFilesCore({
  1. bool? allowsMultiple,
})

Called by pickFile and pickMultipleFiles.

Implementation

static Future<List<FcFilePickerPath>?> pickFilesCore(
    {bool? allowsMultiple}) async {
  if (Platform.isIOS) {
    final iosPicker = IosDocumentPicker();
    final files = await iosPicker.pick(IosDocumentPickerType.file,
        multiple: allowsMultiple ?? false);
    if (files == null) {
      return null;
    }
    final res = files
        .map((e) => FcFilePickerPath.fromPathAndUri(e.name, e.path, e.url))
        .nonNulls
        .toList();
    return res.isEmpty ? null : res;
  }
  // Use fast native macOS picker.
  if (Platform.isMacOS) {
    final macosPicker = MacosFilePicker();
    final files = await macosPicker.pick(MacosFilePickerMode.file,
        allowsMultiple: allowsMultiple ?? false);
    if (files == null) {
      return null;
    }
    final res = files
        .map((e) => FcFilePickerPath.fromPathAndUri(e.name, e.path, e.url))
        .nonNulls
        .toList();
    return res.isEmpty ? null : res;
  }
  if (Platform.isAndroid) {
    final files = await _safUtil.pickFiles(multiple: allowsMultiple ?? false);
    if (files == null || files.isEmpty) {
      return null;
    }
    final res =
        files.map((e) => FcFilePickerPath.fromUri(e.name, e.uri)).toList();
    return res.isEmpty ? null : res;
  }

  if (allowsMultiple == true) {
    final files = await openFiles();
    return files.isEmpty
        ? null
        : files
            .map((e) => FcFilePickerPath.fromPath(e.name, e.path))
            .toList();
  }

  final file = await openFile();
  return file == null
      ? null
      : [FcFilePickerPath.fromPath(file.name, file.path)];
}