shareThreadAttachment function

Future<void> shareThreadAttachment({
  1. required BuildContext context,
  2. required RoomClient room,
  3. required String path,
})

Implementation

Future<void> shareThreadAttachment({required BuildContext context, required RoomClient room, required String path}) async {
  final box = context.findRenderObject() as RenderBox?;
  final sharePositionOrigin = box == null ? null : box.localToGlobal(Offset.zero) & box.size;

  final url = await room.storage.downloadUrl(path);
  final response = await http.get(Uri.parse(url));
  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw HttpException('Download failed with status ${response.statusCode}', uri: Uri.parse(url));
  }

  final fileName = p.basename(path);
  final tempDirectory = await getTemporaryDirectory();
  final file = File(p.join(tempDirectory.path, fileName));
  await file.writeAsBytes(response.bodyBytes, flush: true);

  await SharePlus.instance.share(
    ShareParams(
      files: [XFile(file.path, mimeType: lookupMimeType(fileName))],
      sharePositionOrigin: sharePositionOrigin,
    ),
  );
}