개발(dev)/flutter
[Flutter] Date 및 Timer 살펴보기
dDong2
2023. 6. 13. 22:33
Datetime
- 어떤 특정 날짜를 의미한다.
DateTime now = DateTime.now();
print(now);
print(now.year);
print(now.month);
print(now.day);
print(now.hour);
print(now.minute);
print(now.second);
print(now.millisecond);
2023-06-12 00:53:32.602
2023
6
12
0
53
32
602
- DateTime()에서 year은 필수, 나머지는 옵셔널 파라미터를 받게 된다.
Duration
- 어떤 특정 기간(언제부터 언제까지)을 의미한다.
Duration duration = Duration(seconds: 60);
print(duration);
print(duration.inDays);
print(duration.inHours);
print(duration.inMinutes);
print(duration.inSeconds);
print(duration.inMilliseconds);
DateTime specificDay = DateTime(2017, 11, 23);
print(specificDay);
final difference = now.difference(specificDay);
print(difference);
print(difference.inDays);
print(difference.inHours);
print(difference.inMinutes);
print(now.isAfter(specificDay));
print(now.isBefore(specificDay));
print('-------');
print(now);
print(now.add(Duration(hours: 10)));
print(now.subtract(Duration(seconds: 20)));
0:01:00.000000
0
0
1
60
60000
2017-11-23 00:00:00.000
48648:59:33.681000
2027
48648
2918939
true
false
-------
2023-06-12 00:59:33.681
2023-06-12 10:59:33.681
2023-06-12 00:59:13.681
- duration에 동일한 기능이 존재하고, 설정 기간에 대한 값을 넣는다.
- now를 통해 특정 기간에 대한 차이값을 구할 수 있다.
- now.difference (inDays, inHours, inMinutes..)
- isAfter는 특정 기간의 이후이므로 true 이고, isBefore는 반대를 의미하여 false를 나타낸다.
- add, subtract로 시간 추가 또는 빼기가 가능하다.
Timer
Timer? timer;
@override
void initState() {
super.initState();
timer = Timer.periodic(Duration(seconds: 1), (timer) {
print('Timer');
});
}
- Timer를 제어할 컨트롤러가 필요하다.
- 해당 코드는 timer가 계속 실행되면서 memory leak을 발생시킬 수 있다.
@override
void dispose() {
if (timer != null) {
timer!.cancel();
}
super.dispose();
}
- 그래서 다음과 같이 dispose를 해주어야 한다.
- 또한, 이전에 null이 되는 HomeScreen이 삭제되는 순간에 같이 cancel을 진행해준다.
- 이때, android studio 밑줄을 해결하기 위해 코드상 오류는 없지만 !를 붙혀준다.