사용자가 입력 한 기간 (분)부터 카운트 다운하는 카운트 다운 타이머를 만들었습니다.
카운트 다운 타이머는 기술적으로 작동하지만 분만 카운트 다운으로 표시됩니다. 초는 전체 시간 동안 : 00으로 유지됩니다.
카운트 다운 타이머의 일부로 초를 표시하려면 어떻게해야합니까?
다음은 더 긴 파일에서 발췌 한 관련 코드입니다. 필요한 경우 더 포함 할 수 있습니다.
개별 코드는 다음과 같이 분류됩니다.
먼저 타이머 텍스트를 실제로 표시하고 스타일을 지정할 수있는 클래스가 있습니다.
class Countdown extends AnimatedWidget {
Countdown({ Key key, this.animation }) : super(key: key, listenable: animation);
Animation<int> animation;
@override
build(BuildContext context){
Duration clockTimer = Duration(seconds: animation.value*60);
String timerText = '${clockTimer.inMinutes.remainder(60).toString()}:${(clockTimer.inSeconds.remainder(60) % 60).toString().padLeft(2, '0')}';
return Text(
"$timerText",
style: TextStyle(
fontSize: 110,
color: Theme.of(context).primaryColor,
),
);
}
}
다음과 같은 애니메이션 컨트롤러가 있습니다.
AnimationController _controller;
@override
void dispose(){
_controller.dispose();
super.dispose();
}
void initState() {
super.initState();
@override
_controller = AnimationController(
vsync: this,
duration: Duration(minutes: gameData.levelClock) // gameData.levelClock is a user entered number elsewhere in the applciation
);
}
마지막으로 Countdown 위젯을 호출하는 코드 부분이 있습니다.
Countdown(
animation: StepTween(
begin: gameData.levelClock, // THIS IS A USER ENTERED NUMBER
end: 0,
).animate(_controller),
)
제공 할 수있는 도움에 감사드립니다.
따라서 문제는 CountDown
위젯 을 만들 때 타이머의 분 단위 값인 double 값으로 시작한다는 것입니다 (이 예에서는 값이 5라고 가정합니다). 애니메이션을 계속하기로부터 카운트 다운한다 begin
행 end
(이 경우 0). 5 분 이상 5에서 0으로 애니메이션됩니다.
그런 다음 값을 사용하고 초로 변환하지만 애니메이션 값이 0에서 5 사이이므로 항상 5:00, 4:00, 3:00, 2:00, 1:00 또는 0:00을 제공합니다. .
해결책은 코드를 다음과 같이 변경하는 것입니다.
Countdown(
animation: StepTween(
begin: gameData.levelClock * 60, // convert to seconds here
end: 0,
).animate(_controller),
)
그런 다음 카운트 다운 위젯 Duration
에서
Duration clockTimer = Duration(seconds: animation.value);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다