如何在Flutter项目中集成watcher库实现Android、iOS端文件监听
Flutter 双端接入watcher文件监听库集成与落地指南
1. 依赖引入
- 打开项目根目录下的
pubspec.yaml文件,在dependencies区块中添加watcher依赖:
dependencies: flutter: sdk: flutter # 可替换为当前最新的稳定版本 watcher: ^1.1.0
- 执行
flutter pub get命令完成依赖拉取,该库为纯Dart实现,Android、iOS双端无需额外原生适配配置。
2. 权限配置(必须配置否则监听无响应)
2.1 Android端权限
打开android/app/src/main/AndroidManifest.xml文件,在manifest根节点下添加存储权限:
<!-- 基础存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- Android 13+ 媒体类文件监听按需添加 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- 若需监听公共存储目录,Android 10+ 需添加以下权限,申请时需引导用户手动授权 --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
2.2 iOS端权限
打开ios/Runner/Info.plist文件,添加目录访问权限声明:
<key>NSDocumentDirectoryUsageDescription</key> <string>需访问文件目录实现文件状态监听</string> <key>LSSupportsOpeningDocumentsInPlace</key> <true/>
注意:iOS受沙箱机制限制,仅可监听应用自有沙箱目录、以及用户主动授权开放的公共目录,无法访问其他应用私有目录
3. 核心功能实现
首先在需要使用监听能力的dart文件头部导入库:
import 'package:watcher/watcher.dart';
3.1 单个文件状态监听
// 传入目标文件的绝对路径初始化监听器 final fileWatcher = FileWatcher("目标文件的绝对路径"); // 订阅监听事件,存储订阅对象用于后续销毁 final StreamSubscription<WatchEvent> fileSub = fileWatcher.events.listen((event) { switch(event.type) { case ChangeType.ADD: print("文件被创建:${event.path}"); break; case ChangeType.MODIFY: print("文件被修改:${event.path}"); break; case ChangeType.REMOVE: print("文件被删除:${event.path}"); break; } }, onError: (error) { print("监听异常:$error"); }); // 页面销毁/不需要监听时取消订阅,避免内存泄漏 // fileSub.cancel();
3.2 目录(含子目录)状态监听
// recursive参数设为true时会递归监听所有子目录的文件变化 final dirWatcher = DirectoryWatcher("目标目录的绝对路径", recursive: true); final StreamSubscription<WatchEvent> dirSub = dirWatcher.events.listen((event) { // 事件处理逻辑和单文件监听一致 print("变化类型:${event.type},变化路径:${event.path}"); }); // 用完取消订阅 // dirSub.cancel();
4. 常见问题说明
- 若出现监听不到变化的情况,优先检查路径是否为绝对路径、权限是否已经被用户授权
- 监听大数量文件的目录时,尽量控制监听范围,避免过多占用系统资源
- 应用退到后台后,部分系统会限制后台文件访问,需按需申请后台运行权限
内容的提问来源于stack exchange,提问作者M.Omer
相关产品推荐
相关产品推荐

