dart - 在 dart 中使用 async/wait 不等待 http 包
问题描述
我已经阅读了与该主题相关的先前发布的问题,但无法理解发生了什么。我想我已经完成了这个官方 dart/flutter 视频中解释的完全相同的过程 - https://www.youtube.com/watch?v=SmTCmDMi4BY
我想做的很简单。我想进行 API 调用,需要等到我得到响应。但我看不到让它工作。也许我对异步/等待的理解是错误的。如果我检查控制台输出,我会得到这样的
Staring the Program
Ending the Program
Got the questions list
[Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question', Instance of 'Question']
有人可以帮我弄这个吗。
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() {
print('Staring the Program');
getQuestions();
print('Ending the Program');
}
void getQuestions() async {
QuizModel qm = QuizModel();
List<Question> questionsList = await qm.getQuestions();
print('Got the questions list');
print(questionsList);
}
class Question {
String question;
bool answer;
Question({this.question, this.answer});
}
class QuizModel {
var quizData;
Future<List<Question>> getQuestions() async {
NetworkHelper networkHelper =
NetworkHelper('https://opentdb.com/api.php?amount=10&type=boolean');
quizData = await networkHelper.getData();
final List<Question> questionsList = [];
for (final question in quizData['results']) {
bool answer;
question['correct_answer'] == 'True' ? answer = true : answer = false;
questionsList
.add(Question(question: question['question'], answer: answer));
}
return questionsList;
}
}
class NetworkHelper {
final String _url;
NetworkHelper(this._url);
Future<dynamic> getData() async {
http.Response response = await http.get(_url);
if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
return jsonData;
} else {
print(response.statusCode);
}
}
}
解决方案
QuizModel.getQestions()
是一个未来。
您的程序正在打印开始、调用未来和打印结束。它不等待未来,getQuestions。
您可以将 async 添加到您的 main 中,并等待方法调用。