Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 从api获取JSON列表数据_Dart_Flutter - Fatal编程技术网

Dart 从api获取JSON列表数据

Dart 从api获取JSON列表数据,dart,flutter,Dart,Flutter,我试图从返回json格式的端点获取问题列表,如下所示: [ { "id": 1, "question": "text", "option1": "text", "option2": "text", "option3": "text", "option4": "text", "answer": "text" }, { "id": 2, "question": "text", "option1": "text

我试图从返回json格式的端点获取问题列表,如下所示:

[
  {
    "id": 1,
    "question": "text",
    "option1": "text",
    "option2": "text",
    "option3": "text",
    "option4": "text",
    "answer": "text"
  },
  {
    "id": 2,
    "question": "text",
    "option1": "text",
    "option2": "text",
    "option3": "text",
    "option4": "text",
    "answer": "text"
  }
]
下面的例子,我有一个测验课:

class Quiz extends Object with _$QuizSerializerMixin {
  List<Question> questions;

  Quiz(this.questions);

  factory Quiz.fromJson(Map<String, dynamic> json) => _$QuizFromJson(json);
}
类测验使用$QuizSerializerMixin扩展对象{
列出问题;
小测验(这个问题);
工厂测验.fromJson(映射json)=>u$QuizFromJson(json);
}
问题类别:

class Question extends Object with _$QuestionSerializerMixin {

  final String question;
  final String option1;
  final String option2;
  final String option3;
  final String option4;
  final String answer;

  Question(
      {this.question,
      this.option1,
      this.option2,
      this.option3,
      this.option4,
      this.answer});

  factory Question.fromJson(Map<String, dynamic> json) =>
      _$QuestionFromJson(json);
}
class Question使用$QuestionSerializerMixin扩展对象{
最后一道弦乐题;
最终字符串选项1;
最终字符串选项2;
最终字符串选项3;
最终字符串选项4;
最后的字符串答案;
问题:(
{这个问题,
此选项1,
此选项2,
此选项3,
这个选项4,
这是答案});
工厂问题。fromJson(映射json)=>
_$QuestionFromJson(json);
}
其功能定义为:

Future<Quiz> fetchQuiz() async {
  final response = await http.get('json_endpoint.placeholder/questions');

  if (response.statusCode == 200) {
    return Quiz.fromJson(json.decode(response.body));
  } else {
    throw Exception('Failed to load quiz');
  }
}
Future fetchquick()异步{
最终响应=等待http.get('json_endpoint.placeholder/questions');
如果(response.statusCode==200){
返回quick.fromJson(json.decode(response.body));
}否则{
抛出异常(“加载测验失败”);
}
}
如何将其传递到新的测验实例中?这可能是显而易见的,但我发现很难做到

我已尝试按如下方式声明变量:

class QuizScreen extends StatefulWidget {
  @override
  _QuizScreenState createState() => _QuizScreenState();
}

class _QuizScreenState extends State<QuizScreen> {
Question question
String option1
...

Quiz quiz = quiz(fetchQuiz());

@override
void initState() {
super.initState();
question = quiz.nextQuestion;
option1 = question.option1;
...
class QuizScreen扩展StatefulWidget{
@凌驾
_QuizScreenState createState()=>\u QuizScreenState();
}
类QuizScreenState扩展状态{
问题
字符串选项1
...
测验=测验(fetchquick());
@凌驾
void initState(){
super.initState();
问题=测验.nextQuestion;
选项1=问题。选项1;
...

quick-quick=quick(fetchquick());
引发错误。

代码应该如下所示

Future foo() async {
  Quiz quiz = await fetchQuiz();
} 

fetchquick()
返回一个
Future
并使用
wait
,对于该函数,包含代码(
foo()
,在我的示例中)需要使
异步

我想您正在寻找。它允许您在
未来
完成时构建UI。结果将是
快照。数据
如果
快照。hasData==true

@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:未来建设者(
future:fetchquick(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回_buildquick(context,snapshot.data);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
返回中心(子项:CircularProgressIndicator());
},
));
}
void\u buildquick(BuildContext上下文,quick-quick){
}

“它给出了一个错误。”请添加完整的错误输出。这是IDE(Android Studio)的一个错误。“参数类型‘Future’无法分配给参数类型‘List’”,看起来您正试图分配来自
fetchquick()的结果
列出问题;
但我看不出在您的问题中会发生这种情况。可能该代码缺失。是的,我已更新了问题以反映我如何分配它。上面的代码不包括我在回答中建议的更改。也不清楚什么方法包含
测验=测验(fetchquick());
也不是
测验(…)
是什么或做什么。我正在尝试创建一个新对象来保存检索到的数据,然后用它填充后来创建的一些文本小部件。