【问题标题】:How to get List<Model> from firebase in Flutter如何在 Flutter 中从 firebase 获取 List<Model>
【发布时间】:2021-06-01 04:48:42
【问题描述】:

我在实时数据库中有这个数据:

RealTime Database IMG

我想得到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,
  });

}

【问题讨论】:

  • 您确实应该将图像保留在行内。它使分析更容易。
  • 关于列表类型,是否有特定的行显示该错误?您可能需要进行一些转换。来自数据库的数据是动态的,而不是类型化的。您需要将该数据转换为模型中的类型。这可能是问题所在。

标签: flutter dart


【解决方案1】:

在你的图片中:

您的字段名为“eaxmQuestion”而不是“examQuestion”。有一个错字。 我不确定这会解决您的问题,但这绝对是一个问题,因为在您的代码中您调用的是quizData['examQuestion']

【讨论】:

  • Ops,谢谢兄弟我真的有编辑,但我有同样的问题:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多