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
相关产品推荐
相关产品推荐

