preload static method

void preload({
  1. Map? urls,
  2. String? baseUrl,
  3. int parallel = 8,
  4. Function? onLoad,
  5. Function? onProgress,
  6. Function? onError,
})

/////////////////////////////////////////////////////////

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();
  }
}