isSafeUnquoted function
Determines if a string value can be safely encoded without quotes.
A string needs quoting if it:
- Is empty
- Has leading or trailing whitespace
- Could be confused with a literal (boolean, null, number)
- Contains structural characters (colons, brackets, braces)
- Contains quotes or backslashes (need escaping)
- Contains control characters (newlines, tabs, etc.)
- Contains the active delimiter
- Starts with a list marker (hyphen)
Implementation
bool isSafeUnquoted(String value, String delimiter) {
if (value.isEmpty) {
return false;
}
if (value.trim() != value) {
return false;
}
// Check if it looks like any literal value (boolean, null, or numeric)
if (isBooleanOrNullLiteral(value) || _isNumericLike(value)) {
return false;
}
// Check for colon (always structural)
if (value.contains(colon)) {
return false;
}
// Check for quotes and backslash (always need escaping)
if (value.contains(doubleQuote) || value.contains(backslash)) {
return false;
}
// Check for brackets and braces (always structural)
if (RegExp(r'[[\]{}]').hasMatch(value)) {
return false;
}
// Check for control characters (newline, carriage return, tab - always need quoting/escaping)
if (RegExp(r'[\n\r\t]').hasMatch(value)) {
return false;
}
// Check for the active delimiter
if (value.contains(delimiter)) {
return false;
}
// Check for hyphen at start (list marker)
if (value.startsWith(listItemMarker)) {
return false;
}
return true;
}