addCssSource function
Add a CSS path using a link element into head DOM node.
cssSource The path to the CSS source file.
insertIndex optional index of insertion inside head node.
Implementation
Future<bool> addCssSource(String cssSource, {int? insertIndex}) async {
var linkInDom = getLinkElementByHREF(cssSource, 'stylesheet');
var prevCall = _addedCssSources[cssSource];
if (prevCall != null) {
if (linkInDom != null) {
return prevCall;
} else {
var removed = _addedCssSources.remove(cssSource);
assert(removed != null);
}
}
if (linkInDom != null) {
return true;
}
print('ADDING <LINK>: $cssSource');
var head = document.querySelector('head') as HTMLHeadElement?;
var script = HTMLLinkElement()
..rel = 'stylesheet'
..href = cssSource;
var completer = Completer<bool>();
script.onLoad.listen((e) {
completer.complete(true);
}, onError: (e) {
completer.complete(false);
});
if (insertIndex != null) {
insertIndex = Math.min(insertIndex, head!.children.length);
head.insertChild(insertIndex, script);
} else {
head!.appendChild(script);
}
var call = completer.future;
_addedCssSources[cssSource] = call;
return call;
}