in lib/src/strings.dart [217:263]
String yamlEncodeBlockString(
YamlNode value, int indentation, String lineEnding) {
const additionalIndentation = 2;
if (!isBlockNode(value)) return yamlEncodeFlowString(value);
final newIndentation = indentation + additionalIndentation;
if (value is YamlList) {
if (value.isEmpty) return ' ' * indentation + '[]';
Iterable<String> safeValues;
final children = value.nodes;
safeValues = children.map((child) {
var valueString =
yamlEncodeBlockString(child, newIndentation, lineEnding);
if (isCollection(child) && !isFlowYamlCollectionNode(child)) {
valueString = valueString.substring(newIndentation);
}
return ' ' * indentation + '- $valueString';
});
return safeValues.join(lineEnding);
} else if (value is YamlMap) {
if (value.isEmpty) return ' ' * indentation + '{}';
return value.nodes.entries.map((entry) {
final safeKey = yamlEncodeFlowString(entry.key);
final formattedKey = ' ' * indentation + safeKey;
final formattedValue =
yamlEncodeBlockString(entry.value, newIndentation, lineEnding);
/// Empty collections are always encoded in flow-style, so new-line must
/// be avoided
if (isCollection(entry.value) && !isEmpty(entry.value)) {
return formattedKey + ':\n' + formattedValue;
}
return formattedKey + ': ' + formattedValue;
}).join(lineEnding);
}
return yamlEncodeBlockScalar(value, newIndentation, lineEnding);
}