updateVSCodeLaunchConfig static method
void
updateVSCodeLaunchConfig()
Implementation
static void updateVSCodeLaunchConfig() {
final root = ConfigService.root;
final flavorConfig = ConfigService.load();
final flavors = flavorConfig.flavors;
final separate = flavorConfig.useSeparateMains;
final vscodeDir = Directory(p.join(root, '.vscode'));
if (!vscodeDir.existsSync()) vscodeDir.createSync();
final launchFile = File(p.join(vscodeDir.path, 'launch.json'));
Map<String, dynamic> config;
if (launchFile.existsSync()) {
try {
config = jsonDecode(launchFile.readAsStringSync());
} catch (_) {
config = {'version': '0.2.0', 'configurations': []};
}
} else {
config = {'version': '0.2.0', 'configurations': []};
}
final List<dynamic> currentConfigs = config['configurations'] ?? [];
// Remove existing flavor configs
currentConfigs.removeWhere(
(c) =>
c is Map &&
c['name'] is String &&
(c['name'] as String).startsWith('Flutter: '),
);
for (final flavor in flavors) {
final String program =
separate ? 'lib/main/main_$flavor.dart' : 'lib/main.dart';
final Map<String, dynamic> flavorConfig = {
'name': 'Flutter: $flavor',
'request': 'launch',
'type': 'dart',
'program': program,
'args': ['--flavor', flavor],
};
// ENV mode: only pass --dart-define=FLAVOR=<flavor> for identification.
// Field values are loaded from .env.<flavor> at runtime.
(flavorConfig['args'] as List<String>).addAll([
'--dart-define',
'FLAVOR=$flavor',
]);
currentConfigs.add(flavorConfig);
}
config['configurations'] = currentConfigs;
const encoder = JsonEncoder.withIndent(' ');
launchFile.writeAsStringSync(encoder.convert(config));
}