forEachFlutterDir function
遍历 Flutter dir
Implementation
Future<void> forEachFlutterDir(String path,
{bool clearBuild = true,
bool clearPods = false,
bool clearGradle = false}) async {
// 不是文件夹退出
if (!await FileSystemEntity.isDirectory(path)) {
return;
}
// 隐藏文件退出
if (!path.startsWith(kDartToolDir) &&
path.split(Platform.pathSeparator).last.startsWith('.')) {
// print('🙈 Hidden folder skip');
return;
}
// 开始遍历
var fileList = Directory(path).listSync(followLinks: false);
var fileNameList =
fileList.map((e) => e.path.split(Platform.pathSeparator).last).toList();
// 检查 Flutter 目录
if (fileNameList.contains(kPubspecYaml)) {
// 处理 package 有 example 的情况
if (fileNameList.contains(kExampleDir)) {
String exampleDirPath = '$path${Platform.pathSeparator}$kExampleDir';
if (Directory(exampleDirPath).existsSync()) {
await forEachFlutterDir(
exampleDirPath,
clearBuild: clearBuild,
clearPods: clearPods,
clearGradle: clearGradle,
);
}
}
// 清理 build
if (clearBuild &&
(fileNameList.contains(kBuildDir) ||
fileNameList.contains(kDartToolDir))) {
await runClean(path);
}
// 清理 Pods
if (clearPods &&
Directory('$path${Platform.pathSeparator}$kIosPodsDir').existsSync()) {
await runPodsClean(path);
}
// 清理 gradle
if (clearGradle &&
Directory('$path${Platform.pathSeparator}$kAndroidDir').existsSync()) {
await runGradleClean(path);
}
} else {
// 没有 Flutter 目录,继续遍历:$path
for (var file in fileList) {
await forEachFlutterDir(
file.path,
clearBuild: clearBuild,
clearPods: clearPods,
clearGradle: clearGradle,
);
}
}
}