본문으로 바로가기

JS에서의 setTimeout, setInterval 개념과 비슷한 동작을 수행할수 있는 Timer클래스를 살펴봅시다.

 

  • dart:async 패키지에 포함되어 있습니다.
  • Timer 클래스는 앱을 종료할 때(dispose) 동작을 취소해줘야 합니다. (백그라운드에서 계속 돌아가게 되니깐요) 물론 다른 버튼을 눌러 수동으로 동작 취소를 하게할 수도 있지만 해당 버튼을 누르도록 강제할 수 없으니 위젯이 dispose될 때 해제하는 것이 좋습니다.

 

UI 관련 내용은 전부 제거하고 Timer 로직과 관련 있는 부분만 가져왔습니다.

// dart:async 패키지에 있습니다.
import 'dart:async';

Timer _timer;

var _time = 0;
var _isRunning = false;


// 위젯이 dispose될 때 _timer를 cancel합니다.
// ?. 옵셔널 체이닝을 통해 _timer가 null이 아닌 경우 cancel하도록 해줬습니다.
@override
void dispose() {
  _timer?.cancel();
  super.dispose();
}

// 특정 버튼을 누르면 타이머를 시작합니다.
void _clickButton() {
  _isRunning = !_isRunning;
  if (_isRunning) {
    _start();
  } else {
    _pause();
  }
}

// Timer.periodic을 통해 setInterval과 같은 기능을 사용할 수 있습니다.
// 여기서는 1초마다 _time을 1씩 증가시키도록 했습니다.
void _start() {
  _timer = Timer.periodic(Duration(seconds: 1), (timer) {
    setState(() {
      _time++;
    });
  });
}

// 정지 버튼을 누르면 타이머를 정지합니다.
void _pause() {
  _timer?.cancel();
}

 

'📱 Mobile > 📱 (old) Flutter v 1.0' 카테고리의 다른 글

[Android] Dex 문제 해결  (0) 2020.07.15
Yellow lines under Text Widgets in Flutter?  (0) 2020.07.10
Sliver  (0) 2020.07.07
network image 캐싱하기  (0) 2020.07.06
BLoC (Bisuness Logic Component) 디자인 패턴  (0) 2020.07.05

darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체