convert method

  1. @override
String convert(
  1. Duration input
)
override

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.

  • S is the source type (input).
  • T is 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();
    }
  }
}