generateFlutterClass function

Future<GenerateResult> generateFlutterClass({
  1. required File iconMap,
  2. required String className,
  3. required String? packageName,
  4. required String namingStrategy,
  5. String indent = ' ',
})

Implementation

Future<GenerateResult> generateFlutterClass({
  required File iconMap,
  required String className,
  required String? packageName,
  required String namingStrategy,
  String indent = '  ',
}) async {
  final Map<String, dynamic> icons = jsonDecode(await iconMap.readAsString());

  final dartIconsEntries = <String>{};
  final dartIconsValues = <String>{};

  for (final entry in icons.entries) {
    final name = namingStrategy == 'snake'
        ? ReCase(entry.key).snakeCase
        : ReCase(entry.key).camelCase;

    dartIconsEntries.add(someReplace(
      template.icon
          .replaceAll(
            '%ICON_NAME%',
            name,
          )
          .replaceFirst(
              '%ICON_CODE%', entry.value.toRadixString(16).toString()),
      className: className,
      indent: indent,
    ));

    dartIconsValues.add(someReplace(
      template.value.replaceAll('%ICON_NAME%', name),
      indent: indent,
      className: className,
    ));
  }

  return GenerateResult(
      someReplace(
        template.base
            .replaceFirst(
              '%PACKAGE%',
              packageName == null
                  ? ''
                  : someReplace(
                      template.package
                          .replaceFirst('%PACKAGE_NAME%', packageName),
                      className: className,
                      indent: indent,
                    ),
            )
            .replaceFirst('%CONTENT%', dartIconsEntries.join('\n'))
            .replaceFirst('%VALUES_MAP%', dartIconsValues.join('\n')),
        className: className,
        indent: indent,
      ),
      icons.length);
}