본문 바로가기

Hello App/Flutter

Flutter _ Timer

230526

 


오늘은 지난 포스팅에 이어

Timer를 만들어 보겠다.

 


Timer를 만들기 전에

세 번째 Flexible에 있는

Container의 모서리 부터

빠르게 둥글게 만들고 가자.

 

BorderRadius.circular(50)을 적용 시켰다.

 

훌륭하다.

 


1. Timer

 

우리는 아래의 Button을 누르면

위의 숫자가 줄어드는 Timer를 만들것이다.

 


우선 시간을 나타내는

totalSeconds를 선언하고

 

25분을 초로 환산하면 1500초 이므로

1500이라 선언한다.

 

그리고 버튼을 눌렀을때

Timer가 실행되야 하므로

onStartPressed() 함수를 선언한다.

 

중요한 포인트는

Dart표준 라이브러리에서

Timer를 제공하는데

 

Timer를 통해 정해진 간격에

한번씩 함수를 실행할 수 있다.

 

이러한 Timer버튼을 누를때마다

초기화가 되어야 하기에

앞에 late라는 variable modifier를 사용한다.

 

 


 

💡 late

 

late modifier는 이 property

당장 초기화 하지 않아도 되지만

반드시 나중에 초기화 할것이다는걸 뜻한다.

 


❗ Undefined class 'Timer'

만약 Timer 선언 시

위와 같은 경고가 뜬다면,

 

맨 상단에

import 'dart:async';

위와 같이 dart:asyncimport 해주자.

 


Periodic time주기마다

위 사진의 (timer) {} 함수를 실행시킨다.

이때 주기duration으로 조정할 수 있다.

 

위와 같이

Duration(seconds : 1)로

1초 마다 timer 자리의 함수가 실행되게 했다.

 

Duration이 실행시킬 함수를 선언해보자.

 

위의 onTick()

setState()totalSeconds 1씩 뺄것이다.

 

즉, 1초마다 HomeScreenWidgetsetState를 실행할 것이다.

 

그리고 위와 같이

함수 자리에 넣어준다.

 


onTick()? onTick?

 

주의해야할 점은

onTick()로 넣으면 안된다.

 

괄호()함수를 지금 실행한다는것을 의미하므로

우리는 Timer가 실행해줄테니

괄호를 넣지 않아도 된다.


그리고 위와 같이

onTick의 인자로 Timer timer를 넣어주면

error또한 없어진다.

 


이제 함수가 잘 실행되는지 확인해보자.

 

25 : 00 이란 문자 대신

$totalseconds를 넣어주고

 

두 번째 Flexible에 있는

IconButton

비어있는 onPressed 자리에

onStartPressed함수를 넣어준다.

 

영상으로 보면 좋겠지만

우선 버튼을 눌렀을때

1씩 숫자가 줄어들고 있다.

 

한가지 모순은

버튼을 누를때마다 

Timer가 실행되므로

점점 숫자 줄어드는 속도가 늘어난다.

 

이를 방지하기 위해 일시정지 버튼이 필요하고

이것은 다음 포스팅에서

만들겠다.

 

 

'Hello App > Flutter' 카테고리의 다른 글

Flutter _ AppBar  (0) 2023.05.29
Flutter _ Pause Play & Date Format  (0) 2023.05.26
Flutter _ User Interface  (0) 2023.05.25
Flutter _ Build Context  (0) 2023.05.25
Flutter _ Stateful Widget  (0) 2023.05.24