从本地数据库检索数据并将其存储在对象列表中

时间:2019-01-08 07:23:28

标签: dart flutter

我正在使用sqflit存储一些数据..正在存储的数据是在两个不同表中的问题和答案..我正试图从两个表中检索数据并将它们存储在类型问题列表中..像这样:

Future<bool> getAllQuestions(String poll_id) async {
print("Poll id is: " + poll_id);
var dbClient = await db;
var questions = await dbClient.rawQuery(
    'SELECT * FROM $tableQuestions WHERE $columnQuestionPollId = "$poll_id"');
print(questions);
for (var q in questions) {
  print(resultsOptionsList);
  print('here here!');
  print(q['question_id']);
  var answers = await dbClient.rawQuery(
      'SELECT * FROM $tableOptions WHERE $columnOptionPollId = "$poll_id" AND $columnOptionQuestionId = "${q['question_id']}"');
  print(answers);
  resultsOptionsList.clear();
  for (var o in answers) {
    print(resultsOptionsList);
    resultsOptionsList.add(ResultsOption.fromJson(o));
  }
  print(resultsOptionsList);
  ResultsQuestion ques = new ResultsQuestion(
      required: /*(q['required']).toLowerCase() == 'true'*/ true,
      icon: 'icon',
      title: q[columnQTitle],
      description: q[columnQDescription],
      link: q[columnLink],
      type: q[columnType],
      maxChoice: q[columnMaxChoice],
      options: resultsOptionsList,
      id: q[columnQId]);
  /*ResultsQuestion ques = ResultsQuestion.fromJson(q);
  ques.options = resultsOptionsList;
  ques.required = true;*/

  resultsList.add(ques);
  print(resultsList[0].options.length);
}
return true;

}

一切正常。但是问题是,例如,现在我有两个问题..问题1的选择是:

  

扑:[{option_id:5c2c9a8d108d3d0453149485,文本:نعم,answerCount:5,poll_option_id:5c2c9a8d108d3d045314948a,option_question_id:5c2c9a8d108d3d0453149483},{option_id:5c2c9a8d108d3d0453149484,文本:لا,answerCount:10,poll_option_id:5c2c9a8d108d3d045314948a,option_question_id:5c2c9a8d108d3d0453149483}]

和问题2选项是:

  

扑:[{option_id:5c2c9a8d108d3d0453149489,文本:نعم,answerCount:5,poll_option_id:5c2c9a8d108d3d045314948a,option_question_id:5c2c9a8d108d3d0453149486},{option_id:5c2c9a8d108d3d0453149488,文本:لا,answerCount:3,poll_option_id:5c2c9a8d108d3d045314948a,option_question_id:5c2c9a8d108d3d0453149486}, {option_id:5c2c9a8d108d3d0453149487,文本:ربما,answerCount:7,poll_option_id:5c2c9a8d108d3d045314948a,option_question_id:5c2c9a8d108d3d0453149486}]

问题在于它总是保存所有问题中的最后一个选项列表!

例如当我尝试打印时:

  print(resultsList[0].options.length);

我应该得到2 ..但我得到3,这是

  print(resultsList[1].options.length);

该如何解决?以及我缺少或做错了什么?

1 个答案:

答案 0 :(得分:0)

我自己发现了问题..我只是将resultsOptionsList的声明移到了for循环之前..

List<ResultsOption> resultsOptionsList = <ResultsOption>[];
  for (var o in answers) {
    //print(resultsOptionsList);
    resultsOptionsList.add(ResultsOption.fromJson(o));
  }

解决了:)!

希望将来能对某人有所帮助。

相关问题