headerContentTypeCharset property

String? headerContentTypeCharset

Returns the header Content-Type charset.

Implementation

String? get headerContentTypeCharset {
  var contentType = headerContentType;
  if (contentType == null) return null;
  var idx = contentType.indexOf(';');
  if (idx < 0) return null;

  var rest = contentType.substring(idx + 1);
  var parts = rest.split(';').map((e) => e.trim().split('='));
  if (parts.isEmpty) return null;

  var charsetPair =
      parts.firstWhereOrNull((e) => equalsIgnoreAsciiCase(e[0], 'charset'));
  if (charsetPair == null) return null;

  var charset = charsetPair[1].trim();
  return charset;
}
void headerContentTypeCharset=(String? charset)

Implementation

set headerContentTypeCharset(String? charset) {
  charset = _normalizeCharset(charset);

  var contentType = headerContentType;
  if (contentType == null) {
    if (charset != null) {
      headerContentType = 'text/plain; charset=$charset';
    }
    return;
  }

  var parts = contentType
      .split(';')
      .map((e) => e.trim())
      .where((e) => e.isNotEmpty)
      .toList();

  var charsetEntry = charset != null ? 'charset=$charset' : null;

  if (parts.length == 1) {
    if (charsetEntry != null) {
      parts.add(charsetEntry);
    }
  } else {
    var idx = parts.indexWhere((e) => e.startsWith('charset='));

    if (charsetEntry != null) {
      if (idx >= 0) {
        parts[idx] = charsetEntry;
      } else {
        parts.insert(1, charsetEntry);
      }
    } else if (idx >= 0) {
      parts.removeAt(idx);
    }
  }

  headerContentType = parts.join('; ');
}