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

Flutter测验项目中Question 1重复两次的问题排查请求

问题分析与解决方案

核心问题排查

你遇到的Question 1重复显示问题,终端打印的随机数组正常但实际显示重复,大概率出在索引映射错误或变量状态维护上,结合你的代码来看:

  1. genrandomarray函数的冗余写法
    你的循环写法for (int i = 1;;)存在逻辑漏洞——变量i始终为1,虽然靠toSet()去重能得到不重复数组,但写法极不严谨,容易引发隐性问题。

  2. nextquestion的索引或状态问题

    • 检查j的初始值:如果j不是从0开始(比如初始为-1),或者j没有作为State成员变量持久化,会导致重复读取random_array的同一个索引。
    • 检查问题列表的索引映射:如果你的问题列表是从0开始的(比如questions[0]对应Question 1),但你直接用i = random_array[j](数组值是1-10)去取questions[i],就会跳过第一个问题,甚至可能因索引越界重复取到错误的问题。

修复步骤

1. 重构随机数组生成函数

替换掉诡异的循环写法,用更可靠的方式生成1-10的随机不重复数组:

void genrandomarray() {
  // 生成1-10的列表并打乱顺序
  random_array = List.generate(10, (index) => index + 1)..shuffle();
  print(random_array);
}

2. 确认变量状态与索引映射

  • 确保j是State类的成员变量,初始值设为0:
    class _YourQuizState extends State<YourQuiz> {
      int j = 0;
      List<int> random_array = [];
      // 其他变量...
    }
    
  • 如果问题列表是0索引开头,取问题时要做索引转换:
    // 假设你的问题列表是questions,Question 1对应questions[0]
    currentQuestion = questions[random_array[j] - 1];
    

3. 检查触发逻辑

确认nextquestion的触发方式正确,比如按钮点击不要写成:

// 错误写法:会立即执行函数,导致重复调用
onPressed: nextquestion()

应该写成:

// 正确写法:点击时才触发
onPressed: nextquestion

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:28