getProjectIdFromFirebaseJson method

Future<String?> getProjectIdFromFirebaseJson()

Attempts to parse the firebase.json file to identify the linked Firebase project ID.

Checks multiple lookup paths including:

  • flutter/platforms/android/default/projectId
  • flutter/platforms/ios/default/projectId
  • flutter/platforms/dart map values

Implementation

Future<String?> getProjectIdFromFirebaseJson() async {
  final file = File('firebase.json');

  if (!file.existsSync()) {
    print('❌ firebase.json not found');
    return null;
  }

  final content = jsonDecode(await file.readAsString());

  try {
    final flutter = content['flutter'];
    if (flutter != null && flutter['platforms'] != null) {
      final platforms = flutter['platforms'];

      // 1. Try Android
      if (platforms['android'] != null &&
          platforms['android']['default'] != null) {
        final id = platforms['android']['default']['projectId'];
        if (id != null) return id;
      }

      // 2. Try iOS
      if (platforms['ios'] != null && platforms['ios']['default'] != null) {
        final id = platforms['ios']['default']['projectId'];
        if (id != null) return id;
      }

      // 3. Try Dart config (most reliable for FlutterFire)
      if (platforms['dart'] is Map) {
        final dart = platforms['dart'] as Map;
        for (final conf in dart.values) {
          if (conf is Map && conf['projectId'] != null) {
            return conf['projectId'];
          }
        }
      }
    }

    print('❌ Unable to extract projectId from firebase.json');
    return null;
  } catch (e) {
    print('❌ Error parsing firebase.json: $e');
    return null;
  }
}