You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:45:04