createDefaultIcons function

Future<void> createDefaultIcons(
  1. Config config,
  2. String? flavor, {
  3. required FLILogger logger,
  4. String prefixPath = '.',
})

Implementation

Future<void> createDefaultIcons(
  Config config,
  String? flavor, {
  required FLILogger logger,
  String prefixPath = '.',
}) async {
  logger.info('Creating default icons Android');
  final String? relativeImagePath = config.getImagePathAndroid();
  if (relativeImagePath == null) {
    throw const InvalidConfigException(constants.errorMissingImagePath);
  }
  final String filePath = path.join(prefixPath, relativeImagePath);
  var image = await utils.decodeImageFile(filePath);

  // Letter-box a non-square source once with the top-level
  // `background_color` so every mipmap density preserves aspect ratio
  // (upstream #214). Non-adaptive Android mipmaps have no platform-specific
  // background color of their own, so this is the only way to opt in.
  if (config.backgroundColor != null) {
    image = utils.letterBoxToSquare(
      image,
      utils.parseHexColor(config.backgroundColor!),
    );
  }
  final File androidManifestFile = File(
    path.join(prefixPath, constants.androidManifestFile),
  );
  final concurrentIconUpdates = <Future<void>>[];
  if (config.isCustomAndroidFile) {
    logger.info('Adding a new Android launcher icon');
    final String iconName = config.androidIconName;
    isAndroidIconNameCorrectFormat(iconName);
    final String iconPath = '$iconName.png';
    for (AndroidIconTemplate template in androidIcons) {
      concurrentIconUpdates.add(
        _saveNewImages(template, image, iconPath, flavor, prefixPath),
      );
    }
    await overwriteAndroidManifestWithNewLauncherIcon(
      iconName,
      androidManifestFile,
    );
  } else {
    logger.info(
      'Overwriting the default Android launcher icon with a new icon',
    );
    for (AndroidIconTemplate template in androidIcons) {
      concurrentIconUpdates.add(
        overwriteExistingIcons(
          template,
          image,
          constants.androidFileName,
          flavor,
          prefixPath: prefixPath,
        ),
      );
    }
    await overwriteAndroidManifestWithNewLauncherIcon(
      constants.androidDefaultIconName,
      androidManifestFile,
    );
  }
  await Future.wait(concurrentIconUpdates);
}