onWidgetDispose static method
Called when widget disposes - handles complete disposal logic
Implementation
static void onWidgetDispose(String scopeName, bool autoDispose) {
if (ZenConfig.enableDebugLogs) {
ZenLogger.logDebug(
'📤 Widget disposing: $scopeName (autoDispose: $autoDispose)');
}
if (autoDispose) {
// Dispose auto-dispose scope completely
final scope = _autoDisposeScopes.remove(scopeName);
if (scope != null && !scope.isDisposed) {
try {
scope.dispose();
if (ZenConfig.enableDebugLogs) {
ZenLogger.logDebug('🗑️ Disposed auto-dispose scope: $scopeName');
}
} catch (e, stackTrace) {
ZenLogger.logError(
'Error disposing auto-dispose scope $scopeName', e, stackTrace);
}
}
// Clean up all tracking for auto-dispose scope
_removeScopeFromTracking(scopeName);
} else {
// Handle persistent scope widget disposal
if (!_explicitlyPersistentScopes.contains(scopeName)) {
final children = _getRemainingChildren(scopeName);
if (children.isEmpty) {
_disposeDirectly(scopeName);
} else {
if (ZenConfig.enableDebugLogs) {
ZenLogger.logDebug(
'⏳ Keeping scope $scopeName alive (has children: ${children.join(', ')})');
}
}
} else {
if (ZenConfig.enableDebugLogs) {
ZenLogger.logDebug(
'🔒 Persistent scope widget disposed but scope remains: $scopeName');
}
}
}
}