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

Flutter中如何按创建时间对文件进行排序?

Flutter 获取文件创建时间及排序实现方案

核心实现方法

Dart 标准库 dart:io 提供的 FileStat 类直接支持获取文件创建时间,对应属性为 birthTime,该属性在 Android、iOS、Windows、macOS 平台均能正常返回有效值,Linux 部分不支持创建时间记录的文件系统会默认返回文件修改时间。

注意:如果项目使用的 Dart SDK 版本低于 2.16,需要先升级 SDK 版本,或使用第三方包 file 的扩展能力实现相同功能。

单文件创建时间获取代码示例

import 'dart:io';

Future<DateTime?> getFileCreateTime(String filePath) async {
  try {
    final fileStat = await File(filePath).stat();
    return fileStat.birthTime;
  } catch (err) {
    // 可根据业务需求增加异常处理逻辑
    return null;
  }
}

文件列表按创建时间排序代码示例

Future<List<File>> sortFilesByCreateTime(List<File> originFiles) async {
  // 批量获取所有文件的创建时间
  final fileWithTimeList = <MapEntry<File, DateTime?>>[];
  for (final file in originFiles) {
    final createTime = await getFileCreateTime(file.path);
    fileWithTimeList.add(MapEntry(file, createTime));
  }

  // 排序逻辑:创建时间为空的排在末尾,默认按时间正序(旧文件在前)
  fileWithTimeList.sort((a, b) {
    if (a.value == null && b.value == null) return 0;
    if (a.value == null) return 1;
    if (b.value == null) return -1;
    // 需要倒序的话改为 b.value!.compareTo(a.value!) 即可
    return a.value!.compareTo(b.value!);
  });

  // 提取排序后的文件列表返回
  return fileWithTimeList.map((entry) => entry.key).toList();
}

兼容优化建议

  • 如果需要兼容全平台的排序准确性,可以将birthTime(创建时间)和modified(修改时间)组合使用,创建时间为空时默认用修改时间作为排序依据。
  • 访问外部存储文件前需要先申请对应平台的存储权限,否则会出现文件访问异常导致无法获取属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:09:03