cleanupFirebaseConfig static method

void cleanupFirebaseConfig(
  1. String flavor
)

Implementation

static void cleanupFirebaseConfig(String flavor) {
  final root = ConfigService.root;

  // 1. firebase.json cleanup
  final firebaseFile = File(p.join(root, 'firebase.json'));
  if (firebaseFile.existsSync()) {
    try {
      final content = firebaseFile.readAsStringSync();
      final json = jsonDecode(content) as Map<String, dynamic>;

      if (json.containsKey('flutter') &&
          json['flutter'].containsKey('platforms') &&
          json['flutter']['platforms'].containsKey('dart')) {
        final dart =
            json['flutter']['platforms']['dart'] as Map<String, dynamic>;
        final targetKey = 'lib/firebase_options_$flavor.dart';

        if (dart.containsKey(targetKey)) {
          dart.remove(targetKey);
          const encoder = JsonEncoder.withIndent('    ');
          firebaseFile.writeAsStringSync(encoder.convert(json));
        }
      }
    } catch (_) {
      // Ignore errors if JSON is malformed
    }
  }

  // 2. google-services.json cleanup
  final googleFile = File(p.join(root, 'android/app/google-services.json'));
  if (googleFile.existsSync()) {
    try {
      final content = googleFile.readAsStringSync();
      final json = jsonDecode(content) as Map<String, dynamic>;

      if (json.containsKey('client')) {
        final clients = json['client'] as List<dynamic>;

        // Calculate package ID for this flavor
        final config = ConfigService.load();
        final baseId = config.android.applicationId;
        final prodFlavor = ConfigService.load().productionFlavor;
        final useSuffix = ConfigService.load().useSuffix;

        String packageId = baseId;
        if (useSuffix && flavor != prodFlavor) {
          packageId = '$baseId.$flavor';
        }

        final initialLength = clients.length;
        clients.removeWhere((c) {
          if (c is Map && c.containsKey('client_info')) {
            final info = c['client_info'] as Map;
            if (info.containsKey('android_client_info')) {
              final android = info['android_client_info'] as Map;
              return android['package_name'] == packageId;
            }
          }
          return false;
        });

        if (clients.length != initialLength) {
          const encoder = JsonEncoder.withIndent('  ');
          googleFile.writeAsStringSync(encoder.convert(json));
        }
      }
    } catch (_) {
      // Ignore errors
    }
  }
}