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 |