checkAndReinit static method
Implementation
static Future<void> checkAndReinit(
AppLogger log, {
String? targetFlavor,
}) async {
if (!ConfigService.isInitialized()) return;
final config = ConfigService.load();
if (config.firebase == null) return;
final hasFiles = ConfigService.hasFirebaseFiles();
// 1. If configured but NO files exist, this is a fresh setup from init or a reset.
if (!hasFiles) {
final prompt = targetFlavor != null
? '\n🔥 Firebase configured but not integrated. Run Firebase setup for flavor "$targetFlavor" now?'
: '\n🔥 Firebase configured but not integrated. Run Firebase setup for all flavors now?';
if (log.confirm(prompt, defaultValue: true)) {
await FirebaseCommand(
logger: log,
fromHook: true,
).execute(targetFlavor: targetFlavor);
}
return;
}
// 2. If files DO exist, we follow the existing prompt/link logic.
final strategy = config.firebase!.strategy;
final isSharedId = strategy.contains('shared_id');
// OPTIMIZATION: If using Shared ID and config already exists, just link it without prompting.
if (isSharedId) {
final optionsFile = File(
p.join(ConfigService.root, 'lib/firebase_options.dart'),
);
if (optionsFile.existsSync()) {
log.info(
'ℹ️ Firebase Shared ID strategy detected. Automatically linking configuration...',
);
FileService.injectFirebase(
separate: config.useSeparateMains,
flavor: targetFlavor,
);
return;
}
}
final prompt = targetFlavor != null
? '\n🔥 Firebase detected. Re-run Firebase setup for flavor "$targetFlavor"?'
: '\n🔥 Firebase detected. Re-run Firebase setup for all flavors?';
if (log.confirm(prompt, defaultValue: true)) {
await FirebaseCommand(
logger: log,
fromHook: true,
).execute(targetFlavor: targetFlavor);
}
}