개발(dev)/flutter

[Flutter] Date 및 Timer 살펴보기

dDong2 2023. 6. 13. 22:33

Datetime

출처:https://medium.flutterdevs.com/date-and-time-picker-in-flutter-72141e7531c

  • 어떤 특정 날짜를 의미한다.
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

출처:https://fluttergems.dev/stopwatch-timer-countdown/

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 밑줄을 해결하기 위해 코드상 오류는 없지만 !를 붙혀준다.