Flutter测验项目中Question 1重复两次的问题排查请求
问题分析与解决方案
核心问题排查
你遇到的Question 1重复显示问题,终端打印的随机数组正常但实际显示重复,大概率出在索引映射错误或变量状态维护上,结合你的代码来看:
genrandomarray函数的冗余写法
你的循环写法for (int i = 1;;)存在逻辑漏洞——变量i始终为1,虽然靠toSet()去重能得到不重复数组,但写法极不严谨,容易引发隐性问题。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
相关产品推荐
相关产品推荐

