blob: afa6680b9af1a44f50c9adbf36df080c788163d7 [file]
import 'package:jaspr/jaspr.dart';
/// A [ChangeNotifier] that silently ignores [notifyListeners] calls after
/// [dispose] has been invoked.
///
/// Project-scoped ViewModels subscribe to long-lived streams (workspace,
/// LSP, logger) whose async cancellation can race with disposal. Extending
/// this class instead of plain [ChangeNotifier] prevents the resulting
/// "used after being disposed" errors without per-callback guards.
abstract class SafeChangeNotifier extends ChangeNotifier {
bool _disposed = false;
/// Whether [dispose] has already been called.
bool get disposed => _disposed;
@override
void dispose() {
_disposed = true;
super.dispose();
}
@override
void notifyListeners() {
if (_disposed) {
return;
}
super.notifyListeners();
}
}