createDefaultIcons function
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);
}