Rest 颤振中的静止API消耗

Rest 颤振中的静止API消耗,rest,flutter,dart,Rest,Flutter,Dart,问题 我试图在未来的函数中从我的颤振应用程序中的rest API接收数据,但我不断收到以下错误: 类型“CastList”不是类型“List”的子类型 我用于获取数据的函数如下所示: static Future<List<Questionnaire>> fetchQuestionnaires() async { try { final response = await http.get('http://10.0.2.2:4010/p

问题

我试图在未来的函数中从我的颤振应用程序中的rest API接收数据,但我不断收到以下错误: 类型“CastList”不是类型“List”的子类型

我用于获取数据的函数如下所示:

static Future<List<Questionnaire>> fetchQuestionnaires() async {
    try {
      final response =
          await http.get('http://10.0.2.2:4010/phone/questionnaires');
      if (response.statusCode == 200) {

        List<Questionnaire> resp =
            json.decode(response.body).cast<List<Questionnaire>>();

        List<Questionnaire> questionnaires = resp
            .map<Questionnaire>((dynamic item) => Questionnaire.fromJson(item))
            .toList();

        log(
          questionnaires.toString(),
        );

        return questionnaires;
      } else {
        throw Exception('Unable to fetch questionnaires');
      }
    } catch (error) {
      log(error.toString());
    }
  }
这是我的问卷。飞镖模型

class Questionnaires {
  List<Questionnaire> _questionnaires;
  Questionnaires.fromJson(this._questionnaires);
}
class Questionnaire {
  int questionnaireId;
  List<DisplayQuestion> displayQuestions = [];
  Questionnaire(this.questionnaireId, this.displayQuestions);
  Questionnaire.fromJson(Map<String, dynamic> json)
      : questionnaireId = json['questionnaireId'],
        displayQuestions = json['displayQuestions'];
}
class DisplayQuestion {
  String _question;
  List<String> _answers;
  String get question => this._question;

  List get answers => this._answers;

  DisplayQuestion(this._question, [List<String> answers])
      : this._answers = answers ?? [];

  DisplayQuestion.fromJson(Map<String, dynamic> json)
      : _question = json['question'],
        _answers = json['answers'];
}
课堂调查问卷{
列出调查问卷;
问卷.fromJson(本问卷);
}
这是一个dart模型

class Questionnaires {
  List<Questionnaire> _questionnaires;
  Questionnaires.fromJson(this._questionnaires);
}
class Questionnaire {
  int questionnaireId;
  List<DisplayQuestion> displayQuestions = [];
  Questionnaire(this.questionnaireId, this.displayQuestions);
  Questionnaire.fromJson(Map<String, dynamic> json)
      : questionnaireId = json['questionnaireId'],
        displayQuestions = json['displayQuestions'];
}
class DisplayQuestion {
  String _question;
  List<String> _answers;
  String get question => this._question;

  List get answers => this._answers;

  DisplayQuestion(this._question, [List<String> answers])
      : this._answers = answers ?? [];

  DisplayQuestion.fromJson(Map<String, dynamic> json)
      : _question = json['question'],
        _answers = json['answers'];
}
班级调查问卷{
奈里德国际问题;
列表显示问题=[];
问卷(this.questionnaireId,this.displayQuestions);
fromJson(映射json)
:questionnaireId=json['questionnaireId'],
displayQuestions=json['displayQuestions'];
}
display-question.dart模型中的代码

class Questionnaires {
  List<Questionnaire> _questionnaires;
  Questionnaires.fromJson(this._questionnaires);
}
class Questionnaire {
  int questionnaireId;
  List<DisplayQuestion> displayQuestions = [];
  Questionnaire(this.questionnaireId, this.displayQuestions);
  Questionnaire.fromJson(Map<String, dynamic> json)
      : questionnaireId = json['questionnaireId'],
        displayQuestions = json['displayQuestions'];
}
class DisplayQuestion {
  String _question;
  List<String> _answers;
  String get question => this._question;

  List get answers => this._answers;

  DisplayQuestion(this._question, [List<String> answers])
      : this._answers = answers ?? [];

  DisplayQuestion.fromJson(Map<String, dynamic> json)
      : _question = json['question'],
        _answers = json['answers'];
}
类显示问题{
字符串问题;
列出答案;
字符串get question=>this.\u question;
列表获取答案=>这个;
显示问题(此.\u问题,[列出答案])
:这个。_answers=答案???[];
DisplayQuestion.fromJson(映射json)
:_question=json['question'],
_answers=json['answers'];
}
为什么使用cast、cast到CastList而不是原始类型

从中,
myList.cast
返回一个
列表
。在您的情况下,您正在调用
resp.cast
,因此返回的将是
List
,这不是您想要的

如果您询问的是
CastList
,它是
List
的子类,请参阅。它很有用,因为
CastList
不需要创建新的列表,它只是原始列表的一个包装器,其中每个元素在返回之前都被转换为
类型

我要做哪些更改来获取数据

问题是您正在调用
resp.cast
,其中
resp
不是包含
类型的列表

以下是基于您提供的代码的工作示例:

导入'dart:convert';
最终样本JSON=“”[
{
“问题ID”:1,
“显示问题”:[
{
“问题”:“你多大了”,
“答案”:[
"1",
"2",
"3",
"4"
]
}
]
}
]
""";
课堂提问{
字符串问题;
列出答案;
DisplayQuestion.fromJson(映射json)
:question=json[“question”],
answers=json[“answers”].cast();
String toString()=>“问题:$question |答案:$answers”;
}
班级调查问卷{
奈里德国际问题;
问题清单;
fromJson(映射json)
:questionnaireId=json['questionnaireId'],
displayQuestions=(json['displayQuestions']作为列表)
.map((questionJson)=>DisplayQuestion.fromJson(questionJson))
.toList();
字符串toString()=>“$displayQuestions”;
}
问卷调查清单(){
列出问卷=
(json.decode(sampleJson)作为列表)
.map((questionnaireJson)=>questionly.fromJson(questionnaireJson))
.toList();
返回问卷;
}
void main(){
打印(parsequestions());
//=>[[问题:你多大了|回答:[1,2,3,4]]
}

您为什么要在此时强制转换列表?你认为它有什么作用?因为如果我这样做,我会得到这个错误:“List”类型不是“List”类型的子类型,谢谢。如何在from中获取显示问题,其中字符串本身是一个属性,答案是一个列表,每个元素都是一个字符串?此时将显示问题,然后在“|”后面显示答案。这不是我的显示所有内容的小部件希望数据不确定我是否理解的方式。你能用一个新的问题来说明你做了什么,得到了什么,想要什么吗?如果你把链接粘贴到这里,我会看一看。谢谢你回复。我能解决这个问题。尝试了一段时间,并将toString函数的覆盖设置为正确的格式。