dart - 从 api 获取 JSON 列表数据
问题描述
我正在尝试从返回格式如下的 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);
}
和问题类:
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);
}
函数定义为:
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');
}
}
如何将其传递给新的测验实例?这可能很明显,但我觉得很难。
我尝试如下声明一个变量:
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;
...
Quiz quiz = Quiz(fetchQuiz());
引发错误。
解决方案
代码应该看起来像
Future foo() async {
Quiz quiz = await fetchQuiz();
}
fetchQuiz()
返回 aFuture<Quiz>
并获取值,您使用await
,因为需要创建包含代码的函数(foo()
在我的示例中)async
。
推荐阅读
- system-verilog - 将生成的 modports 传递给同一模块的实例
- regex - Wiremock url 匹配 - “null。使用正则表达式时,“?”应该是“\\?”。URL 必须以 / 开头
- module - SICStus Prolog 中的隐式模块初始化
- excel - 如果单元格具有特定值,则删除行
- python-3.x - 如何从支票图像中提取支票金额?
- php - Laravel Eloquent:产品、属性和属性值的关系
- python - 在 venv 中使用 pip for linux 安装 openbabel
- javascript - React Native with Expo - 键盘压缩元素
- deno - 如何在一处管理 Deno 依赖项
- android - 如果“值”在kotlin中有“null”或“0”,如何过滤列表