본문 바로가기

Develop/Flutter

[Flutter] Duration 값 간결히 나타내기

728x90

1. 개요

Flutter 에서 기간 혹은 시간을 나타내기 위해서는 Duration 을 사용한다.

사용 예시는 다음과 같다.

  1. 1밀리초: Duration(milliseconds: 1)
  2. 50분: Duration(minutes: 50)
  3. 1년: Duration(days: 365)

1.1. 개선 필요성

위와 같은 쓰임은 개발하는데 상당히 불편했다.

Future.delayed() 나, Timer.periodic() 함수 등과 같이 쓰이기라도 한다면, 코드길이가 너무 길어지고 가독성이 많이 떨어졌다. 또한 const 를 붙이라는 IDE 의 말을 따른다면 다음과 같은 코드가 완성된다.

await Future.delayed(const Duration(milliseconds: 500), () {
  // ...
});

Timer.periodic(const Duration(milliseconds: 500), (_) {
  // ...
});

이를 Dart 의 extension 을 활용하여 더욱 간단히 표현하고자 한다.

2. 활용 문법

2.1. extension

2.2. get

3. 구현

extension IntExtension on int {
  Duration get ms => Duration(milliseconds: this);
  Duration get s => Duration(seconds: this);
  Duration get m => Duration(minutes: this);
  Duration get h => Duration(hours: this);
  Duration get d => Duration(days: this);
  Duration get w => Duration(days: this * 7);
  Duration get y => Duration(days: this * 365);
}

위와 같이 구현하면, 단순히 int 값 뒤에 ms, s, m 등을 호출하여 Duration 을 간단하게 나타낼 수 있다.

500.ms; // Duration(milliseconds: 500);
50.h; // Duration(hours: 50);
2.w; // Duration(days: 14);
728x90