【发布时间】:2021-06-01 04:48:42
【问题描述】:
我在实时数据库中有这个数据:
我想得到examQuestion
当我使用它时
Future<void> restApiExam() async{
var url= 'https://taw3ia-ac6b2.firebaseio.com/Exam.json';
try{
final response = await http.get(url);
final extractedData = json.decode(response.body) as Map<String, dynamic>;
final List<ExamModel> loadQuiz =[];
extractedData.forEach((quizId , quizData){
loadQuiz.add(ExamModel(
examId : quizId,
examTitle: quizData['examTitle'],
examMark: quizData['examMark'],
examPassingMark: quizData['examPassingMark'],
examQuestion: (quizData['examQuestion'] as List<dynamic>).map((question) => QuestionModel(
questionTitle: question['questionTitle'],
questionAnswer: question['questionAnswer'].cast<String>(),
questionImage: question['questionImage'],
questionPoint: question['questionPoint'],
rightAnswer: question['rightAnswer'],
)
).toList() ,
isPublic: quizData['isPublic'],
));
});
_exam = loadQuiz;
notifyListeners();
}
catch(e){
throw(e);
}
}
错误:
E/flutter (27654): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:类型 '_InternalLinkedHashMap
' 不是类型转换中类型 'List' 的子类型
我的考试模型:
class ExamModel with ChangeNotifier {
final String examId;
final String examTitle;
final String examMark;
final String examPassingMark;
final List<QuestionModel> examQuestion;
final bool isPublic;
ExamModel({
@required this.examId,
@required this.examTitle,
@required this.examMark,
@required this.examPassingMark,
@required this.examQuestion,
this.isPublic = false,
});
}
我的问题模型:
class QuestionModel with ChangeNotifier{
final String restById;
final String questionId;
final String questionTitle;
final String questionImage;
final int questionPoint;
final List<String> questionAnswer;
final String rightAnswer;
QuestionModel({
@required this.restById,
@required this.questionId,
@required this.questionTitle,
@required this.questionImage,
@required this.questionPoint,
@required this.questionAnswer,
@required this.rightAnswer,
});
}
【问题讨论】:
-
您确实应该将图像保留在行内。它使分析更容易。
-
关于列表类型,是否有特定的行显示该错误?您可能需要进行一些转换。来自数据库的数据是动态的,而不是类型化的。您需要将该数据转换为模型中的类型。这可能是问题所在。