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

Flutter测验应用如何从Firebase Realtime Database随机抽取20道题

Flutter + Firebase 测验应用随机抽题实现方案

现有逻辑已经完成全量题目的拉取,无需调整Firebase端的存储结构或查询规则,直接在客户端对拉取到的题目列表做随机处理即可。150道题的数据量极小,客户端处理无性能压力,是改动成本最低的实现方式。

具体修改步骤

  • 引入Dart内置的随机数工具库
    在当前文件的导入区域添加如下代码:
import 'dart:math';
  • 修改getData方法,实现打乱+截取逻辑
    将原有getData方法替换为以下实现:
Future<List<Question>> getData() async {
  // 拉取全量题库
  final allQuestions = await db.fetchQuestions();
  // 传入随机种子打乱列表顺序
  allQuestions.shuffle(Random());
  // 固定抽取20道题,兼容题库总量不足20道的边界场景,避免数组越界
  const int quizLength = 20;
  return allQuestions.length >= quizLength 
      ? allQuestions.sublist(0, quizLength) 
      : allQuestions;
}
  • 原有业务逻辑无需额外调整
    现有代码中题目索引判断、总题数统计、计分、结果页跳转逻辑全部基于返回的题目列表长度动态计算,随机截取后的列表会自动适配原有逻辑,不需要做额外修改。

大规模题库可选方案

如果后续题库扩容到千道以上,不想每次拉取全量数据,可以提前给Firebase中每道题配置唯一的数字ID,每次启动测验时生成20个不重复的随机ID,按需查询对应题目即可。但该方案需要额外维护ID唯一性,且会增加查询次数,当前150道题的规模完全不需要采用。

注意:shuffle方法仅修改内存中加载的题目列表顺序,不会改动Firebase端存储的题目原始顺序,每次启动应用都会重新拉取、重新打乱,可保证每次测验的题目组合、展示顺序都是随机的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:09:18