import 'dart:io'; import 'package:win_text_editor/frame/models/file_node.dart'; class FileService { /// 延时加载目录内容(不递归) static Future> listDirectory(String path, {int parentDepth = 0}) async { final directory = Directory(path); final List nodes = []; if (await directory.exists()) { final entities = directory.listSync(); // 遍历目录实体并创建FileNode for (final entity in entities) { nodes.add( FileNode( name: entity.path.split(Platform.pathSeparator).last, path: entity.path, isDirectory: entity is Directory, depth: parentDepth + 1, children: [], ), ); } // 排序:文件夹在前按字母排序,文件在后按字母排序 nodes.sort((a, b) { if (a.isDirectory && !b.isDirectory) { return -1; // a是文件夹,b是文件,a排在前面 } else if (!a.isDirectory && b.isDirectory) { return 1; // a是文件,b是文件夹,b排在前面 } else { // 都是文件夹或都是文件时,按名称字母排序 return a.name.compareTo(b.name); } }); } return nodes; } /// 递归构建完整文件树(原方法保留备用) static Future> buildFileTree(String rootPath) async { final rootDirectory = Directory(rootPath); final List nodes = []; if (await rootDirectory.exists()) { final entities = rootDirectory.listSync(); for (final entity in entities) { final node = FileNode( name: entity.path.split(Platform.pathSeparator).last, path: entity.path, isDirectory: entity is Directory, ); if (entity is Directory) { node.children.addAll(await buildFileTree(entity.path)); } nodes.add(node); } } return nodes; } static Future readFile(String filePath) async { return await File(filePath).readAsString(); } static Future writeFile(String filePath, String content) async { await File(filePath).writeAsString(content); } }