You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.7 KiB
60 lines
1.7 KiB
import 'dart:io'; |
|
import 'package:win_text_editor/app/models/file_node.dart'; |
|
|
|
class FileService { |
|
/// 延时加载目录内容(不递归) |
|
static Future<List<FileNode>> listDirectory(String path, {int parentDepth = 0}) async { |
|
final directory = Directory(path); |
|
final List<FileNode> nodes = []; |
|
|
|
if (await directory.exists()) { |
|
final entities = directory.listSync(); |
|
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, // 关键修复:基于父节点深度+1 |
|
children: [], |
|
), |
|
); |
|
} |
|
} |
|
return nodes; |
|
} |
|
|
|
/// 递归构建完整文件树(原方法保留备用) |
|
static Future<List<FileNode>> buildFileTree(String rootPath) async { |
|
final rootDirectory = Directory(rootPath); |
|
final List<FileNode> 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<String> readFile(String filePath) async { |
|
return await File(filePath).readAsString(); |
|
} |
|
|
|
static Future<void> writeFile(String filePath, String content) async { |
|
await File(filePath).writeAsString(content); |
|
} |
|
}
|
|
|