Tah*_*hir 1 dart flutter flutter-animation
尝试构建一个考试应用程序,每次从 API 命中时我一次只能得到一个问题。我想做的是构建问题并在显示问题时启动计时器(90-0)。计时器为 0 或按下提交按钮后,将构建新问题(从 API 获取数据后),计时器从 90 秒重新开始。此时,计时器从 90 变为 0,并停止,之后不再启动setState
我已经看到并尝试了其他解决方案,例如创建startTimer()函数,但TweenAnimationBuilder似乎适合该任务。但是,无法弄清楚使用 再次启动它onEnd。
这是我的 TweenAnimationBuilder:
TweenAnimationBuilder(
tween: Tween(begin: 90.0, end: 0.0),
duration: Duration(seconds: 90),
builder: (context, value, child) {
num val = value;
num time = val.toInt();
return Stack(
alignment: Alignment.center,
children: [
normalText(
text: "$time",
size: 25,
color: color__orange),
SizedBox(
width: 60,
height: 60,
child: CircularProgressIndicator(
value: time /
90,
valueColor: const AlwaysStoppedAnimation(
color__orange),
),
),
]
);
},
onEnd: (){
var questionID = snapshot.data!.quizzesData!.first.questionID;
QuizQuestion(questionID);
setState(() {
});
},
),
Run Code Online (Sandbox Code Playgroud)
这是提交按钮:
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: color__orange ),
onPressed: (){
if (selectedOptionStatus == 'True') {
var questionID = snapshot.data!.quizzesData!.first.questionID;
var score = snapshot.data!.quizzesData!.first.question!.first.marks;
var answerID = snapshot.data!.quizzesData!.first.question!.first.answer![index].answerID;
QuizQuestion(questionID);
StudentQuestionAnswer(questionID, score, answerID);
// currentQuestionIndex = int.parse(widget.totalQuestions) - remainingQuestions;
currentQuestionIndex++;
if ( (currentQuestionIndex + 1) == int.parse(widget.totalQuestions)) {
updateStudentQuizLoginHistoryFinish();
}
setState(() {});
}
else {
if (selectedOptionStatus == 'False') {
var questionID = snapshot.data!.quizzesData!.first.questionID;
var score = '0';
var answerID = snapshot.data!.quizzesData!.first.question!.first.answer![index].answerID;
QuizQuestion(questionID);
StudentQuestionAnswer(questionID, score, answerID);
currentQuestionIndex++;
if (currentQuestionIndex + 1 == int.parse(widget.totalQuestions)) {
StudentQuiz();
}
setState(() {});
}
}
},
child: const Text('Save Answer')
)
Run Code Online (Sandbox Code Playgroud)
为 TweenAnimationBuilder 提供密钥
key: ValueKey(questionId)
这将强制释放前一个 TweenAnimationBuilder,并创建并附加新的 TweenAnimationBuilder。