getNavigatorFileContent method

String getNavigatorFileContent(
  1. String screenName,
  2. String navigatorFileContent
)

Implementation

String getNavigatorFileContent(
    String screenName, String navigatorFileContent) {
  String routeName = screenName.routeName;
  if (navigatorFileContent.contains("abstract class RouteNavigator")) {
    List lines = navigatorFileContent.replaceAll("\n\n", "\n").split("\n");
    int index = lines.indexWhere(
        (element) => element.contains("abstract class RouteNavigator"));
    if (index != -1) {
      String imports =
          "import 'package:${PubspecUtils.instance.getAppName}/App/screens/$screenName/view/$screenName.dart';\nimport 'package:${PubspecUtils.instance.getAppName}/App/screens/$screenName/${CliDataProvider.instance.codePattern.value}/${screenName}_${CliDataProvider.instance.codePattern.value}.dart';";
      lines.insert(index, "$imports\n\n");
    }
    navigatorFileContent = lines.join("\n");

    //
    RegExp regExp = RegExp(r'routes\s*=\s*{([^}]+)};');
    Match? match = regExp.firstMatch(navigatorFileContent);
    if (match == null) return navigatorFileContent;
    String? matchData = match.group(0);
    if (matchData == null) return navigatorFileContent;
    String mapStringData =
        matchData.replaceAll("routes = {", "").replaceAll("};", "").trim();
    if (!mapStringData.endsWith(",")) {
      mapStringData = "$mapStringData,";
    }

    String routes =
        "routes = {${mapStringData}Routes.$routeName: (BuildContext context) => BlocProvider(create: (context) => ${CliDataProvider.instance.codePattern == CodePattern.bloc ? screenName.blocName : screenName.cubitName}(),child: const ${screenName.camelCase}(),)};";
    navigatorFileContent = navigatorFileContent.replaceAll(matchData, routes);
    return DartFormatter().format(navigatorFileContent);
  }
  return navigatorFileContent;
}