addPart method

PartBuilder addPart({
  1. ContentDispositionHeader? disposition,
  2. MimePart? mimePart,
  3. MediaSubtype? mediaSubtype,
  4. bool insert = false,
})

Adds a new part

Specify the optional disposition in case you want to specify the content-disposition.

Optionally specify the mimePart, if it is already known.

Optionally specify the mediaSubtype, e.g. MediaSubtype.multipartAlternative.

Optionally set insert to true to prepend and not append the part.

Compare addText, addFile

Implementation

PartBuilder addPart({
  ContentDispositionHeader? disposition,
  MimePart? mimePart,
  MediaSubtype? mediaSubtype,
  bool insert = false,
}) {
  final addAttachmentInfo = mimePart != null &&
      mimePart.getHeaderContentDisposition()?.disposition ==
          ContentDisposition.attachment;
  mimePart ??= MimePart();
  final childBuilder = PartBuilder(mimePart);
  if (mediaSubtype != null) {
    childBuilder.setContentType(mediaSubtype.mediaType);
  } else if (mimePart.getHeaderContentType() != null) {
    childBuilder.contentType = mimePart.getHeaderContentType();
  }
  final children = _children ?? <PartBuilder>[];
  if (insert) {
    _part.insertPart(mimePart);
    children.insert(0, childBuilder);
  } else {
    _part.addPart(mimePart);
    children.add(childBuilder);
  }
  _children = children;
  final usedDisposition =
      disposition ?? mimePart.getHeaderContentDisposition();
  childBuilder.contentDisposition = usedDisposition;
  if (mimePart.isTextMediaType()) {
    childBuilder.text = mimePart.decodeContentText();
  }
  if (addAttachmentInfo && usedDisposition != null) {
    final info = AttachmentInfo(
      null,
      mimePart.mediaType,
      mimePart.decodeFileName(),
      usedDisposition.size,
      usedDisposition.disposition,
      mimePart.decodeContentBinary(),
      childBuilder,
    );
    _attachments.add(info);
  }

  return childBuilder;
}