30 lines
800 B
Dart
30 lines
800 B
Dart
String? normalizedOptionalText(String? value) {
|
|
final normalized = value?.trim();
|
|
if (normalized == null || normalized.isEmpty) return null;
|
|
return normalized;
|
|
}
|
|
|
|
({String label, String tooltip}) categoryChipText({
|
|
required String? categoryPath,
|
|
required String fallbackL1,
|
|
}) {
|
|
final path = categoryPath?.trim();
|
|
if (path == null || path.isEmpty) {
|
|
return (label: fallbackL1, tooltip: fallbackL1);
|
|
}
|
|
|
|
final parts = path
|
|
.split('>')
|
|
.map((part) => part.trim())
|
|
.where((part) => part.isNotEmpty)
|
|
.toList();
|
|
|
|
if (parts.isEmpty) {
|
|
return (label: fallbackL1, tooltip: fallbackL1);
|
|
}
|
|
|
|
return (label: parts.last, tooltip: parts.join(' > '));
|
|
}
|
|
|
|
String locationLabel(String prefix, String location) => '$prefix$location';
|