parseCanvasAssetRef function
Implementation
CanvasAssetRef parseCanvasAssetRef(String input) {
final raw = input.trim();
if (raw.isEmpty) {
return const CanvasRawAssetRef('');
}
// Windows absolute path, e.g. C:\tmp\a.png or C:/tmp/a.png.
if (RegExp(r'^[a-zA-Z]:[\\/]').hasMatch(raw)) {
return CanvasFileAssetRef(raw: raw, path: raw);
}
if (_looksLikeLocalPath(raw)) {
return CanvasFileAssetRef(raw: raw, path: raw);
}
final uri = Uri.tryParse(raw);
final scheme = uri?.scheme.toLowerCase() ?? '';
if (scheme == 'http' || scheme == 'https') {
return CanvasUrlAssetRef(raw: raw, uri: uri!);
}
if (scheme == 'data') {
return CanvasDataUriAssetRef(raw);
}
if (scheme == 'blob') {
return CanvasBlobUrlAssetRef(raw);
}
if (scheme == 'file') {
return CanvasFileAssetRef(raw: raw, path: _filePathFromUri(raw));
}
final customScheme = _customScheme(raw);
if (customScheme != null) {
return CanvasSchemeAssetRef(
raw: raw,
scheme: customScheme.$1,
payload: customScheme.$2,
);
}
return CanvasRawAssetRef(raw);
}