getFormattedString method

String getFormattedString(
  1. VCard vCard
)

Implementation

String getFormattedString(VCard vCard) {
  majorVersion = vCard.getMajorVersion();

  String formattedVCardString = '';
  formattedVCardString += 'BEGIN:VCARD' + nl();
  formattedVCardString += 'VERSION:' + vCard.version + nl();

  String encodingPrefix = majorVersion >= 4 ? '' : ';CHARSET=UTF-8';
  String formattedName = vCard.formattedName ?? '';

  [vCard.firstName, vCard.middleName, vCard.lastName].forEach((name) {
    if ((name.isNotEmpty) && (formattedName.isNotEmpty)) {
      formattedName += ' ';
    }
    formattedName += name;
  });

  formattedVCardString +=
      'FN' + encodingPrefix + ':' + e(formattedName) + nl();
  formattedVCardString += 'N' +
      encodingPrefix +
      ':' +
      e(vCard.lastName) +
      ';' +
      e(vCard.firstName) +
      ';' +
      e(vCard.middleName) +
      ';' +
      e(vCard.namePrefix) +
      ';' +
      e(vCard.nameSuffix) +
      nl();

  if ((vCard.nickname.isNotEmpty) && (majorVersion >= 3)) {
    formattedVCardString +=
        'NICKNAME' + encodingPrefix + ':' + e(vCard.nickname) + nl();
  }

  if (vCard.gender != null) {
    formattedVCardString += 'GENDER:' + e(vCard.gender ?? '') + nl();
  }

  if (vCard.uid != null) {
    formattedVCardString +=
        'UID' + encodingPrefix + ':' + e(vCard.uid ?? '') + nl();
  }

  if (vCard.birthday != null) {
    formattedVCardString += 'BDAY:' + formatVCardDate(vCard.birthday!) + nl();
  }

  if ((vCard.anniversary != null) && (majorVersion >= 4)) {
    formattedVCardString +=
        'ANNIVERSARY:' + formatVCardDate(vCard.anniversary!) + nl();
  }

  if (vCard.email != null) {
    if (vCard.email is! List) {
      vCard.email = [vCard.email];
    }
    vCard.email.forEach((address) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'EMAIL' + encodingPrefix + ';type=HOME:' + e(address) + nl();
      } else if (majorVersion >= 3 && majorVersion < 4) {
        formattedVCardString += 'EMAIL' +
            encodingPrefix +
            ';type=HOME,INTERNET:' +
            e(address) +
            nl();
      } else {
        formattedVCardString +=
            'EMAIL' + encodingPrefix + ';HOME;INTERNET:' + e(address) + nl();
      }
    });
  }

  if (vCard.workEmail != null) {
    if (vCard.workEmail is! List) {
      vCard.workEmail = [vCard.workEmail];
    }
    vCard.workEmail.forEach((address) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'EMAIL' + encodingPrefix + ';type=WORK:' + e(address) + nl();
      } else if (majorVersion >= 3 && majorVersion < 4) {
        formattedVCardString += 'EMAIL' +
            encodingPrefix +
            ';type=WORK,INTERNET:' +
            e(address) +
            nl();
      } else {
        formattedVCardString +=
            'EMAIL' + encodingPrefix + ';WORK;INTERNET:' + e(address) + nl();
      }
    });
  }

  if (vCard.otherEmail != null) {
    if (vCard.otherEmail is! List) {
      vCard.otherEmail = [vCard.otherEmail];
    }
    vCard.otherEmail.forEach((address) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'EMAIL' + encodingPrefix + ';type=OTHER:' + e(address) + nl();
      } else if (majorVersion >= 3 && majorVersion < 4) {
        formattedVCardString += 'EMAIL' +
            encodingPrefix +
            ';type=OTHER,INTERNET:' +
            e(address) +
            nl();
      } else {
        formattedVCardString +=
            'EMAIL' + encodingPrefix + ';OTHER;INTERNET:' + e(address) + nl();
      }
    });
  }

  // if (vCard.logo.url != null) {
  //   formattedVCardString += getFormattedPhoto('LOGO', vCard.logo.url ?? '',
  //       vCard.logo.mediaType ?? '', vCard.logo.isBase64 ?? false);
  // }

  if (vCard.photo != null) {
    formattedVCardString += getFormattedPhoto(vCard.photo);
  }

  if (vCard.cellPhone != null) {
    if (vCard.cellPhone is! List) {
      vCard.cellPhone = [vCard.cellPhone];
    }

    vCard.cellPhone.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="voice,cell":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=CELL:' + e(number) + nl();
      }
    });
  }

  if (vCard.pagerPhone != null) {
    if (!vCard.pagerPhone is! List) {
      vCard.pagerPhone = [vCard.pagerPhone];
    }
    vCard.pagerPhone.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="pager,cell":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=PAGER:' + e(number) + nl();
      }
    });
  }

  if (vCard.homePhone != null) {
    if (vCard.homePhone is! List) {
      vCard.homePhone = [vCard.homePhone];
    }
    vCard.homePhone.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="voice,home":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=HOME,VOICE:' + e(number) + nl();
      }
    });
  }

  if (vCard.workPhone != null) {
    if (vCard.workPhone is! List) {
      vCard.workPhone = [vCard.workPhone];
    }
    vCard.workPhone.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="voice,work":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=WORK,VOICE:' + e(number) + nl();
      }
    });
  }

  if (vCard.homeFax != null) {
    if (vCard.homeFax is! List) {
      vCard.homeFax = [vCard.homeFax];
    }
    vCard.homeFax.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="fax,home":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=HOME,FAX:' + e(number) + nl();
      }
    });
  }

  if (vCard.workFax != null) {
    if (vCard.workFax is! List) {
      vCard.workFax = [vCard.workFax];
    }
    vCard.workFax.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="fax,work":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=WORK,FAX:' + e(number) + nl();
      }
    });
  }

  if (vCard.otherPhone != null) {
    if (vCard.otherPhone is! List) {
      vCard.otherPhone = [vCard.otherPhone];
    }
    vCard.otherPhone.forEach((number) {
      if (majorVersion >= 4) {
        formattedVCardString +=
            'TEL;VALUE=uri;TYPE="voice,other":tel:' + e(number) + nl();
      } else {
        formattedVCardString += 'TEL;TYPE=OTHER:' + e(number) + nl();
      }
    });
  }

  // Format Addresses
  formattedVCardString += getFormattedAddress(
      address: vCard.homeAddress, encodingPrefix: encodingPrefix);
  formattedVCardString += getFormattedAddress(
      address: vCard.workAddress, encodingPrefix: encodingPrefix);

  if (vCard.jobTitle != null) {
    formattedVCardString +=
        'TITLE' + encodingPrefix + ':' + e(vCard.jobTitle ?? '') + nl();
  }

  if (vCard.role != null) {
    formattedVCardString +=
        'ROLE' + encodingPrefix + ':' + e(vCard.role ?? '') + nl();
  }

  if (vCard.organization != null) {
    formattedVCardString +=
        'ORG' + encodingPrefix + ':' + e(vCard.organization ?? '') + nl();
  }

  if (vCard.url != null) {
    formattedVCardString +=
        'URL' + encodingPrefix + ':' + e(vCard.url ?? '') + nl();
  }

  if (vCard.workUrl != null) {
    formattedVCardString += 'URL;type=WORK' +
        encodingPrefix +
        ':' +
        e(vCard.workUrl ?? '') +
        nl();
  }

  if (vCard.note != null) {
    formattedVCardString +=
        'NOTE' + encodingPrefix + ':' + e(vCard.note ?? '') + nl();
  }

  if (vCard.socialUrls.isNotEmpty) {
    vCard.socialUrls.forEach((key, value) {
      if (value.isNotEmpty) {
        formattedVCardString += 'X-SOCIALPROFILE' +
            encodingPrefix +
            ';TYPE=' +
            key +
            ':' +
            e(vCard.socialUrls[key]) +
            nl();
      }
    });
  }

  if (vCard.source != null) {
    formattedVCardString +=
        'SOURCE' + encodingPrefix + ':' + e(vCard.source ?? '') + nl();
  }

  formattedVCardString += 'REV:' + DateTime.now().toIso8601String() + nl();

  if (vCard.isOrganization) {
    formattedVCardString += 'X-ABShowAs:COMPANY' + nl();
  }

  formattedVCardString += 'END:VCARD' + nl();
  return formattedVCardString;
}