Flutter/Library

[Flutter] Timer (기다린 후 일회성, 주기적 반복작업)

개발자킹콩 2023. 4. 4. 18:25

Timer의 기능은 두가지로 명확하다

1. 기다린 후 일회성으로 함수를 실행

2. 주기적으로 반복하여 함수를 실행

3. 사용방법

 

* 영단어
period: 기간
periodic: 주기적인
duration: 지속, 계속, 지속기간

 


 

1. 기다린 후 일회성으로 함수를 실행한다.

Timer의 default constructor 이다. 기다릴 기간과 1회 실행할 콜백함수를 인자로 전달한다.

import 'dart:async';

// 해당 시간을 기다린 수 콜백함수 1회 실행
Timer(Duration(seconds: 3), (Timer timer) { // 매개변수로 현재 실행중인 Timer 객체가 제공된다.
    // 기능 구현
})

 


 

2. 주기적으로 반복하여 함수를 실행

Timer의 유일한 named constructor 이다. 주기의 기간과 실행할 콜백함수를 인자로 전달한다.

import 'dart:async';

// 주기가 지날때마다 콜백함수를 실행한다.
Timer.periodic(Duration(seconds: 3), (Timer timer) { // 매개변수로 현재 실행중인 Timer 객체가 제공된다.
    // 반복할 기능 구현하면 된다.
})

 

 


 

3. 사용방법 ( import 'dary:async'; )

Timer의 일회성 기능은 한번만 실행되고 소멸되기에 어디서든 사용 가능하다. 하지만 Timer의 주기적인 함수실행의 경우 계속해서 메모리에 할당이 되어 있어야 하므로 정확한 사용법을 모르면 Memory Leak 가 발생할 수 있다.

 

대표적으로 StatelessWidget에서 사용하게 되면 새로운 매개변수 값이 들어올때마다 위젯을 재생성 합니다. 그럼 재생성 될때마다 build() 함수가 재실행 됩니다. Timer를 build()에 추가하게 되면 위젯이 새로 생성될 때마다 매번 새로운 Timer 객체를 생성하게 됩니다. 그러면 Memory Leak(메모리 누수)이 생기게 됩니다. 그래서 StatefulWidget을 사용해서 생성 시 단 한번만 실행되는 State 클래스의 initState()에 Timer 객체를 생성해 주기적인 콜백함수를 구현 가능하다. 

 

 

왼쪽은 가장 기본이 되는 형태를 구현한 것이다. 오른쪽은 인스타 스토리와 같이 일정 시간이 지나면 계속 사진이 넘어가는 프로젝트의 구현 방법이다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Flutter > Library' 카테고리의 다른 글

[Flutter] 일정 시간 주기로 움직이는 광고 배너  (0) 2023.04.06