checkPackageRegister function

Future<bool> checkPackageRegister(
  1. String package,
  2. PackagePosition position
)

检查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;
}