shareXFiles method

  1. @override
Future<ShareResult> shareXFiles(
  1. List<XFile> files, {
  2. String? subject,
  3. String? text,
  4. Rect? sharePositionOrigin,
})
override

Summons the platform's share sheet to share multiple files.

Implementation

@override
Future<ShareResult> shareXFiles(
  List<XFile> files, {
  String? subject,
  String? text,
  Rect? sharePositionOrigin,
}) async {
  assert(files.isNotEmpty);

  final filesWithPath = await _getFiles(files);
  assert(filesWithPath.every((element) => element.path.isNotEmpty));

  final mimeTypes = filesWithPath
      .map((e) => e.mimeType ?? _mimeTypeForPath(e.path))
      .toList();

  final paths = filesWithPath.map((e) => e.path).toList();
  assert(paths.length == mimeTypes.length);
  assert(mimeTypes.every((element) => element.isNotEmpty));

  final params = <String, dynamic>{
    'paths': paths,
    'mimeTypes': mimeTypes,
  };

  if (subject != null) params['subject'] = subject;
  if (text != null) params['text'] = text;

  if (sharePositionOrigin != null) {
    params['originX'] = sharePositionOrigin.left;
    params['originY'] = sharePositionOrigin.top;
    params['originWidth'] = sharePositionOrigin.width;
    params['originHeight'] = sharePositionOrigin.height;
  }

  final result = await channel.invokeMethod<String>('shareFiles', params) ??
      'dev.fluttercommunity.plus/share/unavailable';

  return ShareResult(result, _statusFromResult(result));
}