You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter答题APP:实现答题后自动3秒切题(无Next按钮)问题求助

解决Flutter自动切题及build方法调用函数报错问题

1. 修复_nextQuestion的UI阻塞问题

你当前用sleep会同步阻塞UI线程,导致APP完全卡死3秒,必须替换为异步延迟方法:

void _nextQuestion() async {
  await Future.delayed(const Duration(seconds: 3));
  setState(() {
    _questionIndex++;
    answerWasSelected = false;
    tappedAnswer = "";
    renderedTwice = false;
  });

  if (_questionIndex >= _questions.length) {
    _resetQuiz();
  }
}

2. 正确触发自动切题的时机

不要在build方法里直接调用业务逻辑函数,build仅用于构建UI,多次执行会引发无限循环或崩溃。正确的做法是在用户点击答案、完成样式更新后启动延迟切题:

假设你的答案点击处理函数是_questionAnswered,修改如下:

void _questionAnswered(String selectedAnswer) {
  // 先更新状态,显示答案的绿/红样式、计算分数等
  setState(() {
    answerWasSelected = true;
    tappedAnswer = selectedAnswer;
    // 此处添加分数计算等逻辑
  });

  // 更新UI后,启动3秒延迟自动切题
  _nextQuestion();
}

这样用户点击答案后,先看到对错样式,3秒后自动切换到下一题,完全匹配你的需求。

3. 解决build方法的语法错误

你在build的Widget列表中直接写执行代码会报错,因为列表元素必须是Widget类型。如果确实需要在UI构建后执行逻辑(不推荐此场景使用),可以用帧回调:

// 在build方法内合适位置添加
if (renderedTwice) {
  WidgetsBinding.instance.addPostFrameCallback((_) {
    _nextQuestion();
  });
}

但此方法容易引发不可控的重复调用,优先使用前面提到的_questionAnswered触发方式。

内容的提问来源于stack exchange,提问作者Luka Mandic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:10:57