getAttachmentUrl method

Uri? getAttachmentUrl({
  1. bool getThumbnail = false,
  2. bool useThumbnailMxcUrl = false,
  3. double width = 800.0,
  4. double height = 800.0,
  5. ThumbnailMethod method = ThumbnailMethod.scale,
  6. int minNoThumbSize = _minNoThumbSize,
  7. bool animated = false,
})

Gets the attachment https URL to display in the timeline, taking into account if the original image is tiny. Returns null for encrypted rooms, if the image can't be fetched via http url or if the event does not contain an attachment. Set getThumbnail to true to fetch the thumbnail, set width, height and method for the respective thumbnailing properties. minNoThumbSize is the minimum size that an original image may be to not fetch its thumbnail, defaults to 80k useThumbnailMxcUrl says weather to use the mxc url of the thumbnail, rather than the original attachment. animated says weather the thumbnail is animated

Implementation

Uri? getAttachmentUrl(
    {bool getThumbnail = false,
    bool useThumbnailMxcUrl = false,
    double width = 800.0,
    double height = 800.0,
    ThumbnailMethod method = ThumbnailMethod.scale,
    int minNoThumbSize = _minNoThumbSize,
    bool animated = false}) {
  if (![EventTypes.Message, EventTypes.Sticker].contains(type) ||
      !hasAttachment ||
      isAttachmentEncrypted) {
    return null; // can't url-thumbnail in encrypted rooms
  }
  if (useThumbnailMxcUrl && !hasThumbnail) {
    return null; // can't fetch from thumbnail
  }
  final thisInfoMap = useThumbnailMxcUrl ? thumbnailInfoMap : infoMap;
  final thisMxcUrl =
      useThumbnailMxcUrl ? infoMap['thumbnail_url'] : content['url'];
  // if we have as method scale, we can return safely the original image, should it be small enough
  if (getThumbnail &&
      method == ThumbnailMethod.scale &&
      thisInfoMap['size'] is int &&
      thisInfoMap['size'] < minNoThumbSize) {
    getThumbnail = false;
  }
  // now generate the actual URLs
  if (getThumbnail) {
    return Uri.parse(thisMxcUrl).getThumbnail(
      room.client,
      width: width,
      height: height,
      method: method,
      animated: animated,
    );
  } else {
    return Uri.parse(thisMxcUrl).getDownloadLink(room.client);
  }
}