createIconsFromConfig function

Future<void> createIconsFromConfig(
  1. Config flutterConfigs,
  2. FLILogger logger,
  3. String prefixPath, [
  4. String? flavor,
  5. bool strict = false,
])

Implementation

Future<void> createIconsFromConfig(
  Config flutterConfigs,
  FLILogger logger,
  String prefixPath, [
  String? flavor,
  bool strict = false,
]) async {
  if (!flutterConfigs.hasPlatformConfig) {
    throw const InvalidConfigException(errorMissingPlatform);
  }

  // Resolve the effective Android min_sdk_android (explicit → autodetect →
  // static default) up-front so a warning surfaces early on autodetect
  // failure. Currently the resolved value is logged for visibility; future
  // phases may consume it for adaptive-icon gating.
  if (flutterConfigs.hasAndroidConfig) {
    final resolvedMinSdk = await android_launcher_icons.resolveMinSdkAndroid(
      prefixPath: prefixPath,
      logger: logger,
      explicit: flutterConfigs.minSdkAndroid,
    );
    logger.verbose(
      'Resolved Android min_sdk_android = $resolvedMinSdk for this run.',
    );
  }

  final concurrentIconCreation = <Future<void>>[];
  if (flutterConfigs.hasAndroidConfig) {
    concurrentIconCreation.add(
      android_launcher_icons.createDefaultIcons(
        flutterConfigs,
        flavor,
        logger: logger,
        prefixPath: prefixPath,
      ),
    );
  }
  if (flutterConfigs.hasAndroidAdaptiveConfig) {
    concurrentIconCreation.add(
      android_launcher_icons.createAdaptiveIcons(
        flutterConfigs,
        flavor,
        logger: logger,
        prefixPath: prefixPath,
      ),
    );
  }
  if (flutterConfigs.hasAndroidAdaptiveMonochromeConfig) {
    concurrentIconCreation.add(
      android_launcher_icons.createAdaptiveMonochromeIcons(
        flutterConfigs,
        flavor,
        logger: logger,
        prefixPath: prefixPath,
      ),
    );
  }
  await Future.wait(concurrentIconCreation);
  if (flutterConfigs.hasAndroidConfig &&
      flutterConfigs.copyMipmapXxxhdpiToDrawable) {
    await android_launcher_icons.copyXxxhdpiMipmapToDrawable(
      flutterConfigs,
      flavor,
      logger: logger,
      prefixPath: prefixPath,
    );
  }
  if (flutterConfigs.hasAndroidConfig) {
    await android_launcher_icons.createMipmapXmlFile(
      flutterConfigs,
      flavor,
      logger: logger,
      prefixPath: prefixPath,
    );
  }
  if (flutterConfigs.hasIOSConfig) {
    await ios_launcher_icons.createIcons(
      flutterConfigs,
      flavor,
      logger: logger,
      prefixPath: prefixPath,
    );
  }

  // Generates Icons for given platform
  await generateIconsFor(
    config: flutterConfigs,
    logger: logger,
    prefixPath: prefixPath,
    flavor: flavor,
    strict: strict,
    platforms: (context) {
      final platforms = <IconGenerator>[];
      if (flutterConfigs.hasWebConfig) {
        platforms.add(WebIconGenerator(context));
      }
      if (flutterConfigs.hasWindowsConfig) {
        platforms.add(WindowsIconGenerator(context));
      }
      if (flutterConfigs.hasMacOSConfig) {
        platforms.add(MacOSIconGenerator(context));
      }
      if (flutterConfigs.linuxConfig?.generate == true) {
        platforms.add(LinuxIconGenerator(context));
      }
      return platforms;
    },
  );
}