watchDirectory method
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;
}
}