hasChanged property

  1. @override
bool get hasChanged
override

Gets a value that indicates if a change has occurred.

Implementation

@override
bool get hasChanged {
  if (_hasChanged) {
    return true;
  }

  // Check if cancellation was requested
  if (_cancellationTokenSource?.isCancellationRequested ?? false) {
    _hasChanged = true;
    return true;
  }

  // Only check if enough time has passed since last check
  final now = DateTime.now();
  if (_lastCheckedTime != null &&
      now.difference(_lastCheckedTime!) < _pollingInterval) {
    return false;
  }

  _lastCheckedTime = now;

  try {
    if (_file.existsSync()) {
      final currentWriteTime = _file.lastModifiedSync();

      if (_previousWriteTime == null) {
        // File was created
        _hasChanged = true;
        _previousWriteTime = currentWriteTime;
      } else if (currentWriteTime != _previousWriteTime) {
        // File was modified
        _hasChanged = true;
        _previousWriteTime = currentWriteTime;
      }
    } else if (_previousWriteTime != null) {
      // File was deleted
      _hasChanged = true;
      _previousWriteTime = null;
    }
  } catch (e) {
    // If we can't access the file, consider it changed
    _hasChanged = true;
  }

  return _hasChanged;
}