preload static method
void
preload({})
/////////////////////////////////////////////////////////
Loading a bunch of Assets, usually for preloading
/////////////////////////////////////////////////////////
Implementation
static void preload(
{Map? urls,
String? baseUrl,
int parallel = 8,
Function? onLoad,
Function? onProgress,
Function? onError}) {
int index = 0;
int loadNum = 0;
double scale = 0;
List urlsList = [];
bool loaded = false;
Function? singleLoad;
Function convertToList = () {
urls?.forEach((key, url) {
Map obj = {};
obj["key"] = key;
if (url is String) {
if (Util.getSuffix(url) == 'img')
obj["type"] = "image";
else
obj["type"] = "json";
obj["url"] = url;
} else if (url is Map) {
if (url["json"] != null)
obj["type"] = "atlas";
else
obj["type"] = "spritesheet";
obj.addAll(url);
}
urlsList.add(obj);
});
};
Function checkLoaded = () {
scale = min(loadNum / urlsList.length, 1);
if (onProgress != null) onProgress(scale);
if (loadNum >= urlsList.length && loaded != true) {
loaded = true;
if (onLoad != null) onLoad();
}
};
Function errorHandler = ([err]) {
loadNum++;
checkLoaded();
singleLoad!();
if (onError != null) onError();
};
Function loadHandler = ([result]) {
loadNum++;
checkLoaded();
singleLoad!();
};
singleLoad = () {
if (loaded) return;
if (index >= urlsList.length) return;
Map obj = urlsList[index++];
String type = obj["type"];
switch (type) {
case "image":
ZKAssets.loadImage(
key: obj["key"],
path: obj["url"],
baseUrl: baseUrl,
onLoad: loadHandler,
onError: errorHandler);
break;
case "json":
ZKAssets.loadJson(
key: obj["key"],
path: obj["url"],
baseUrl: baseUrl,
onLoad: loadHandler,
onError: errorHandler,
parse: false);
break;
case "atlas":
ZKAssets.loadAltas(
key: obj["key"],
json: obj["json"],
baseUrl: baseUrl,
image: obj["image"],
onLoad: loadHandler,
onError: errorHandler);
break;
case "spritesheet":
ZKAssets.loadSpriteSheet(
key: obj["key"],
width: obj["width"],
height: obj["height"],
image: obj["image"],
baseUrl: baseUrl,
onLoad: loadHandler,
onError: errorHandler);
break;
}
};
/// begin s load
convertToList();
int length = min(parallel, urlsList.length);
for (int i = 0; i < length; i++) {
singleLoad();
}
}