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

Flutter/Dart中如何按日期排序SAF获取的媒体文件路径列表?

如何将SAF获取的媒体文件路径按创建时间排序

saf.cache()方法仅返回文件路径字符串,不包含文件的创建时间元数据,因此需要手动获取每个文件的创建时间后再对列表进行排序。以下是具体实现方案:

实现步骤

  1. 借助dart:io中的File类获取每个文件的属性(包含创建时间);
  2. 先批量获取所有文件的创建时间,避免排序过程中重复IO操作;
  3. 基于创建时间对路径列表进行排序。

完整代码示例

import 'dart:io';
import 'package:saf/saf.dart';

Future<List<String>> fetchImages() async {
  Saf saf = Saf('specific_directory');
  List<String>? cacheList = await saf.cache();
  if (cacheList == null) return [];
  
  // 过滤出jpg格式文件
  List<String> imageList = cacheList.where((element) => element.endsWith('.jpg')).toList();
  
  // 批量获取文件属性,同时处理异常
  List<MapEntry<String, FileStat>> fileEntries = [];
  for (final path in imageList) {
    try {
      final fileStat = await File(path).stat();
      fileEntries.add(MapEntry(path, fileStat));
    } catch (e) {
      // 可根据需求处理无法访问的文件,比如跳过或记录日志
      print('获取文件属性失败:$path,错误信息:$e');
    }
  }
  
  // 按创建时间升序排序(最早创建的文件在前)
  fileEntries.sort((a, b) => a.value.created.compareTo(b.value.created));
  
  // 提取排序后的路径列表
  return fileEntries.map((entry) => entry.key).toList();
}

注意事项

  • 权限问题:确保应用已获取对应的文件访问权限,否则File.stat()会抛出异常;
  • 排序方向:如果需要按创建时间降序排列,将排序逻辑改为b.value.created.compareTo(a.value.created)即可;
  • 异常处理:部分文件可能因权限或已被删除无法访问,建议添加异常捕获避免流程中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:45:37