generateCode function
Implementation
String generateCode(List<Tuple2<String, String>> folderInfo, String existingCode) {
Set<String> imports = {};
Set<String> newImports = {};
List<String> existingWidgets = [];
List<String> newWidgets = [];
Set<String> processedFolders = {}; // To track folders that already have 'usage' or 'newview'
// 기존 코드에서 import 구문과 widgets 리스트를 추출
var importRegex = RegExp(r"import\s+'([^']+)' as (\w+);");
var widgetRegex = RegExp(r"Tuple2\('([^']+)',\s+(\w+)\.(\w+)\(\)\)");
var importMatches = importRegex.allMatches(existingCode);
var widgetMatches = widgetRegex.allMatches(existingCode);
for (var match in importMatches) {
String importLine = match.group(0)!;
String importPath = match.group(1)!;
String asName = match.group(2)!;
imports.add(importLine);
if (importPath.endsWith('_/_.dart') || importPath.endsWith('usage.dart')) {
String folderName = importPath.split('/')[2]; // Extract folder name from import path
processedFolders.add(folderName);
}
}
for (var match in widgetMatches) {
existingWidgets.add(match.group(0)!);
}
// 새로운 폴더 정보를 처리하여 import 및 widget 항목 추가
for (var info in folderInfo) {
String folderName = info.item1;
String type = info.item2;
String asName = folderName.replaceAll('.', '_');
String importLine = "";
if (processedFolders.contains(folderName)) {
// Skip if the folder is already processed
continue;
}
if (type == 'usage') {
importLine = "import '../../widget_book/$folderName/usage.dart' as $asName;";
if (!imports.any((import) => import.contains("$folderName/usage.dart"))) {
newImports.add(importLine);
newWidgets.add("Tuple2('$folderName', $asName.Usage())");
processedFolders.add(folderName); // Mark folder as processed
}
} else if (type == 'newview') {
importLine = "import '../../widget_book/$folderName/_/_.dart' as $asName;";
if (!imports.any((import) => import.contains("$folderName/_/_.dart"))) {
newImports.add(importLine);
newWidgets.add("Tuple2('$folderName', $asName.NewView())");
processedFolders.add(folderName); // Mark folder as processed
}
}
}
String importsCode = (newImports.isNotEmpty ? newImports.join('\n') + '\n' : '') + imports.join('\n');
String widgetsCode = newWidgets.join(',\n ') + (newWidgets.isNotEmpty ? ',\n ' : '') + existingWidgets.join(',\n ');
return '''
import 'package:flutter/material.dart';
import 'package:tuple/tuple.dart';
$importsCode
final List<Tuple2<String, Widget>> widgets = [
$widgetsCode
];
''';
}