extractTextFromTextWidgets function

void extractTextFromTextWidgets()

Implementation

void extractTextFromTextWidgets() {
  Directory libDirectory = Directory('lib');

  if (!libDirectory.existsSync()) {
    print('lib directory not found!');
    return;
  }

  Map<String, String> texts = {};

  libDirectory.listSync(recursive: true).forEach((fileSystemEntity) {
    if (fileSystemEntity is File && fileSystemEntity.path.endsWith('.dart')) {
      String content = fileSystemEntity.readAsStringSync();
      String importStatement =
          "import 'package:example/core/app_extinsions.dart';";
      if (!content.contains(importStatement)) {
        content = '$importStatement\n$content';
      }

      RegExp textRegex = RegExp(
          r'''Text\s*\(\s*["\']([^"\']*)["\']|title:\s*["\']([^"\']*)["\']|label:\s*["\']([^"\']*)["\']|textLabel:\s*["\']([^"\']*)["\']|hint:\s*["\']([^"\']*)["\']''',
          dotAll: true);
      Iterable<RegExpMatch> textMatches = textRegex.allMatches(content);

      bool hasReplacements = false;

      for (var match in textMatches) {
        for (int i = 1; i <= 5; i++) {
          if (match.group(i) != null && match.group(i)!.isNotEmpty) {
            String extractedText = match.group(i)!;

            String key = _generateKey(extractedText);
            if (!texts.containsKey(key)) {
              texts[key] = extractedText;
            }

            String replacement = 'context.loc.$key';

            if (content.contains('"$extractedText"')) {
              content = content.replaceFirst('"$extractedText"', replacement);
              hasReplacements = true;
            } else if (content.contains("'$extractedText'")) {
              content = content.replaceFirst("'$extractedText'", replacement);
              hasReplacements = true;
            }
          }
        }
      }
      if (hasReplacements) {
        fileSystemEntity.writeAsStringSync(content);
      }
    }
  });

  if (texts.isNotEmpty) {
    stdout.write(
        '${ColorsText.orange} Extracted texts JSON Format: ${ColorsText.reset}\n');
    texts.forEach((key, value) {
      print('''"$key":"$value",''');
    });
  } else {
    print('No texts found');
  }
}