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.
61 lines
1.7 KiB
61 lines
1.7 KiB
2 months ago
|
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);
|
||
|
}
|
||
|
}
|