checkPackageRegister function
检查package是否注册到yaml中
Implementation
Future<bool> checkPackageRegister(String package, PackagePosition position) async {
final yamlFile = await getYamlFile();
if (yamlFile == null) return false;
var yamlFileContent = yamlFile.readAsLinesSync();
var rootYamlMap = loadYaml(yamlFile.readAsStringSync()) as YamlMap;
if (!rootYamlMap.containsKey(position.str)) {
logger.i('Register "${position.str}" in pubspec.yaml.\n');
var insertLine = -1;
// 注册dev_dependencies到yaml文件中
if (position == PackagePosition.devDependencies) {
insertLine = _findDependencyLastLine(rootYamlMap, PackagePosition.dependencyOverrides.str, yamlFileContent);
if (insertLine == -1) {
insertLine = _findDependencyLastLine(rootYamlMap, PackagePosition.dependencies.str, yamlFileContent);
}
if (insertLine == -1) {
logger.e('Cannot find "dependency" or "dependency_overrides" in the pubspec.yaml file');
return false;
}
}
yamlFileContent.insert(++insertLine, '\r${position.str}:');
final writeResult = await writeFile(yamlFile, yamlFileContent);
if (writeResult) {
yamlFileContent = yamlFile.readAsLinesSync();
rootYamlMap = loadYaml(yamlFile.readAsStringSync()) as YamlMap;
}
}
final childYamlMap = rootYamlMap[position.str] as YamlMap?;
if (childYamlMap == null || !childYamlMap.containsKey(package)) {
logger.i('Register "$package" in pubspec.yaml.\n');
final version = await getRemoteVersion(package);
if (version != null) {
var insertLine = _findDependencyLastLine(rootYamlMap, position.str, yamlFileContent);
yamlFileContent.insert(++insertLine, ' $package: ^$version');
final writeResult = await writeFile(yamlFile, yamlFileContent);
// 写入成功,执行flutter pub get命令
if (writeResult) await runFlutterPubGet();
return writeResult;
} else {
logger.e('Failed to get the latest version of "$package", please try again.');
return false;
}
}
return true;
}