apply method
Applies the inspected migration idempotently.
Implementation
Future<void> apply({String? flavor, String? firebaseProjectId}) async {
final definesDirectory = Directory("dart_defines");
if (!definesDirectory.existsSync()) {
await definesDirectory.create(recursive: true);
}
for (final flavor in ["dev", "prod"]) {
final file = File("dart_defines/$flavor.env");
final current = file.existsSync() ? await file.readAsString() : "";
await file.writeAsString(_normalizeDefine(current, flavor));
}
final gradle = _androidGradleFile();
if (gradle != null) {
var source = await gradle.readAsString();
if (!source.contains(AndroidNativeEnvironmentSynchronizer.beginMarker)) {
source = _restoreLegacyApplicationId(source);
source = AndroidNativeEnvironmentSynchronizer.synchronize(
source,
isKotlin: gradle.path.endsWith(".kts"),
);
await gradle.writeAsString(source);
}
}
for (final path in _appleProjectPaths) {
final file = File(path);
if (!file.existsSync()) {
continue;
}
await file.writeAsString(
AppleFirebaseEnvironmentSynchronizer.synchronizeProject(
await file.readAsString(),
),
);
}
for (final path in [
"ios/Flutter/Debug.xcconfig",
"ios/Flutter/Release.xcconfig",
]) {
final file = File(path);
if (!file.existsSync()) {
continue;
}
final lines = await file.readAsLines();
await file.writeAsString(
lines.where((line) => !line.contains("DartDefine.xcconfig")).join("\n"),
);
}
for (final path in [
"android/env.properties",
"ios/Flutter/DartDefine.xcconfig",
]) {
final file = File(path);
if (file.existsSync()) {
await file.delete();
}
}
if (flavor != null && (firebaseProjectId?.isNotEmpty ?? false)) {
await _migrateLegacyFirebase(flavor, firebaseProjectId!);
}
}