watchDirectory method

Future<String?> watchDirectory(
  1. String dirPath,
  2. void callback(
    1. FileChange
    ), {
  3. bool recursive = true,
  4. List<String> extensions = const [],
  5. List<String> ignorePatterns = const [],
})

Watch a directory for changes.

Implementation

Future<String?> watchDirectory(
  String dirPath,
  void Function(FileChange) callback, {
  bool recursive = true,
  List<String> extensions = const [],
  List<String> ignorePatterns = const [],
}) async {
  final dir = Directory(dirPath);
  if (!dir.existsSync()) return null;

  final id = 'watch_${_nextId++}';

  try {
    final stream = dir.watch(
      events: FileSystemEvent.all,
      recursive: recursive,
    );

    final sub = stream.listen((event) {
      // Filter by extension
      if (extensions.isNotEmpty) {
        final hasMatchingExt = extensions.any(
          (ext) => event.path.endsWith(ext),
        );
        if (!hasMatchingExt) return;
      }

      // Filter by ignore patterns
      if (ignorePatterns.isNotEmpty) {
        final shouldIgnore = ignorePatterns.any(
          (pattern) => event.path.contains(pattern),
        );
        if (shouldIgnore) return;
      }

      _handleEvent(id, event, callback);
    });

    _subscriptions[id] = WatchSubscription._(
      id: id,
      path: dirPath,
      subscription: sub,
    );

    return id;
  } catch (_) {
    return null;
  }
}