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

如何在Dart中将文件移动至回收站?

将文件移至回收站的解决方案

Flutter 本身没有跨平台的内置 API 直接将文件移至回收站,因为不同操作系统的回收站/废纸篓实现逻辑不同,需要针对各平台做原生适配,以下是分平台的实现思路:

Android 平台

可以借助系统的删除 Intent,让系统处理文件到回收站的逻辑(需注意对应存储权限,Android 10+ 还要适配分区存储规则):

  • 通过 MethodChannel 调用原生 Android 代码,示例如下:
    val file = File(filePath)
    val uri = FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file)
    val intent = Intent(Intent.ACTION_DELETE)
    intent.data = uri
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    context.startActivity(intent)
    

iOS 平台

利用 iOS 原生的 FileManager 废纸篓接口,通过 MethodChannel 调用:

  • 示例原生代码:
    let fileURL = URL(fileURLWithPath: filePath)
    do {
        try FileManager.default.trashItem(at: fileURL, resultingItemURL: nil)
    } catch {
        print("移至废纸篓失败:\(error)")
    }
    

Windows 平台

调用 Windows Shell API 的 SHFileOperation 函数,指定允许撤销的标记即可将文件移至回收站,也可以借助 win32 包直接在 Dart 层调用:

  • 示例 Dart 代码:
    import 'package:win32/win32.dart';
    
    void moveToRecycleBin(String path) {
      final fileOp = SHFILEOPSTRUCT(
        wFunc: FO_DELETE,
        pFrom: TEXT(path),
        fFlags: FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT,
      );
      SHFileOperation(fileOp);
    }
    

macOS 平台

和 iOS 逻辑类似,通过原生 FileManager 的 trash 方法处理,同样可以通过 MethodChannel 对接 Flutter:

  • 示例原生代码:
    let fileURL = URL(fileURLWithPath: filePath)
    try FileManager.default.trashItem(at: fileURL, resultingItemURL: nil)
    

跨平台便捷方案

如果不想手动编写各平台原生代码,可以选择社区维护的成熟插件,这类插件已封装好各平台的回收站逻辑,直接调用对应方法即可完成文件移动操作。


内容的提问来源于stack exchange,提问作者TSR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:19:53