convert method
A generic interface for converting an input of type S into an output of
type T.
Converters are commonly used in Jetleaf when transforming data between different layers, formats, or domains. This abstraction allows developers to define reusable transformation logic while keeping code strongly typed.
Sis the source type (input).Tis the target type (output).
Example
Converting a String to an int:
class StringToIntConverter implements Converter<String, int> {
@override
int convert(String source) {
return int.parse(source);
}
}
void main() {
final converter = StringToIntConverter();
final number = converter.convert("42");
print(number); // 42
}
Converting a Map into a custom model:
class User {
final String name;
final int age;
User(this.name, this.age);
}
class MapToUserConverter implements Converter<Map<String, Object?>, User> {
@override
User convert(Map<String, Object?> source) {
return User(source['name'] as String, source['age'] as int);
}
}
void main() {
final converter = MapToUserConverter();
final user = converter.convert({'name': 'Alice', 'age': 30});
print(user.name); // Alice
}
Implementation
@override
String convert(Duration input) {
final hours = input.inHours;
final minutes = input.inMinutes.remainder(60);
final seconds = input.inSeconds.remainder(60);
final milliseconds = input.inMilliseconds.remainder(1000);
if (hours > 0) {
if (milliseconds > 0) {
return '$hours:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}.${milliseconds.toString().padLeft(3, '0')}';
} else {
return '$hours:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}';
}
} else if (minutes > 0) {
if (milliseconds > 0) {
return '$minutes:${seconds.toString().padLeft(2, '0')}.${milliseconds.toString().padLeft(3, '0')}';
} else {
return '$minutes:${seconds.toString().padLeft(2, '0')}';
}
} else {
if (milliseconds > 0) {
return '$seconds.${milliseconds.toString().padLeft(3, '0')}';
} else {
return seconds.toString();
}
}
}