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

未处理异常:Future<dynamic>不是FutureOr<QuizResultModel?>的子类型

解决Flutter中Future<dynamic>与FutureOr<QuizResultModel?>类型不匹配异常

问题根源

异常产生的核心原因是saveAnswerFetchResult函数声明返回Future<dynamic>,但你在赋值时试图将其强制转换为FutureOr<QuizResultModel?>,动态类型无法直接安全转换为指定的泛型Future类型,导致类型转换失败。

修复步骤

1. 修正函数返回类型

将saveAnswerFetchResult的返回类型从Future<dynamic>改为Future<QuizResultModel?>,让编译器直接做类型校验,彻底避免动态类型带来的转换问题:

Future<QuizResultModel?> saveAnswerFetchResult(
    String? testPaperId,
    String? programId,
    List<Map<String, dynamic>> answer,
    String? paperAttemptId,
  ) async {
    QuizResultModel? quizResultModel;
    try {
      Map<String, dynamic> requestedData = {
        "action": actionforquizsavefetchresult,
        "answers": answer,
        "testPaper": testPaperId,
        "program": programId,
        "paper_attempt": paperAttemptId,
      };
      // 补充你的网络请求与解析逻辑(示例)
      // final response = await http.post(Uri.parse(yourApiUrl), body: requestedData);
      // final responseMap = jsonDecode(response.body);
      // quizResultModel = QuizResultModel.formMap(responseMap);
    } catch (e) {
      // 异常处理,确保出错时也返回合法的QuizResultModel?类型
      print(e);
      return null;
    }
    return quizResultModel;
  }

2. 简化赋值代码,移除不必要的类型转换

函数返回类型明确后,直接await调用即可,无需强制类型转换:

quizResultModel = await QuizService().saveAnswerFetchResult(
      widget.testPaperDetailsModel!.id,
      widget.packageId,
      answer,
      paperAttempt
    );

3. 完善QuizResultModel.formMap工厂方法

当前工厂方法仅初始化了部分字段,需确保所有字段都能从接口返回值中正确解析,避免后续使用模型时出现空值或逻辑错误:

factory QuizResultModel.formMap(Map<String, dynamic> map) {
  return QuizResultModel(
    correctAnswers: map["correct_answers"]?.toString() ?? "0",
    totalQuestions: map["total_questions"]?.toString() ?? "0",
    isPass: map["is_pass"] ?? false,
    isTimeUp: map["is_time_up"] ?? false,
    skipped: map["skipped"]?.toString() ?? "0",
    timeSpend: map["time_spend"]?.toString() ?? "0",
    marksArchived: map["marks_archived"]?.toString() ?? "0",
    testType: map["test_type"],
    totalMarks: map["total_marks"]?.toString() ?? "0",
    message: map["message"],
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:17:06