Uri.dataFromString constructor

Uri.dataFromString(
  1. String content, {
  2. String? mimeType,
  3. Encoding? encoding,
  4. Map<String, String>? parameters,
  5. bool base64 = false,
})

Creates a data: URI containing the content string.

Converts the content to bytes using encoding or the charset specified in parameters (defaulting to US-ASCII if not specified or unrecognized), then encodes the bytes into the resulting data URI.

Defaults to encoding using percent-encoding (any non-ASCII or non-URI-valid bytes is replaced by a percent encoding). If base64 is true, the bytes are instead encoded using base64.

If encoding is not provided and parameters has a charset entry, that name is looked up using Encoding.getByName, and if the lookup returns an encoding, that encoding is used to convert content to bytes. If providing both an encoding and a charset in parameters, they should agree, otherwise decoding won't be able to use the charset parameter to determine the encoding.

If mimeType and/or parameters are supplied, they are added to the created URI. If any of these contain characters that are not allowed in the data URI, the character is percent-escaped. If the character is non-ASCII, it is first UTF-8 encoded and then the bytes are percent encoded. An omitted mimeType in a data URI means text/plain, just as an omitted charset parameter defaults to meaning US-ASCII.

To read the content back, use UriData.contentAsString.

Example:

final uri = Uri.dataFromString(
  'example content',
  mimeType: 'text/plain',
  parameters: <String, String>{'search': 'file', 'max': '10'},
);
print(uri); // data:;search=name;max=10,example%20content

Implementation

factory Uri.dataFromString(
  String content, {
  String? mimeType,
  Encoding? encoding,
  Map<String, String>? parameters,
  bool base64 = false,
}) {
  UriData data = UriData.fromString(
    content,
    mimeType: mimeType,
    encoding: encoding,
    parameters: parameters,
    base64: base64,
  );
  return data.uri;
}