appRouteSetter function

void appRouteSetter(
  1. List<String> screens
)

Implementation

void appRouteSetter(List<String> screens) {
  String fieldGenerator(String screen) {
    var name = screen.split('/').last.toPascalCase();
    return 'GetPage(name: AppRoutes.${name.toCamelCase()}, page: () => const $name())';
  }

  var lib = Library(
    (lib) => lib
      ..directives.add(Directive.import('package:get/get.dart'))
      ..directives.addAll(screens.map((e) => Directive.import('package:culina/screens/$e')))
      ..body.addAll([
        Class(
          (c) => c
            ..name = 'AppRoutes'
            ..fields.addAll(
              [
                ...screens.map((e) => Field((f) => f
                  ..static = true
                  ..name = e.split('/').last.split('.').first.toCamelCase()
                  ..assignment = Code('"/${e.split('.').first}"'))),
                Field(
                  (b) => b
                    ..name = 'routes'
                    ..modifier = FieldModifier.final$
                    ..static = true
                    ..assignment = Code('''[
                      ${screens.map((screen) => fieldGenerator(screen.split('.').first)).join(',\n')}
                    ]'''),
                ),
              ],
            ),
        ),
      ]),
  );
  File('lib/utils/routes.dart')
      .writeAsStringSync(formatter.format(DartEmitter.scoped(useNullSafetySyntax: true).visitLibrary(lib).toString()));
}