我必须把这两个" on tap ";功能只有一个按钮。问题是,我只能在执行了saveQuestionModel()
和loadQuestions()
之后才能执行Navigator.push
。
onTap: () {
saveQuestionModel(_key, snapshot.data);
loadQuestions(_key);
},
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => QuizScreen(
code: _key,
index: _currentIndex,
),
),
);
我试过这样做,但没有工作
onTap: () async {
saveQuestionModel(_key, snapshot.data);
loadQuestions(_key);
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => QuizScreen(
code: _key,
index: _currentIndex,
),
),
);
},
有没有办法做到这一点,而不使用两个分开的按钮?
创建一个单独的方法来保存所有的方法,并且在以后的方法之前使用await
。
void myFun() async{
await myFutureLoad();
// include others
....
}
在onTap
上使用myFun
onTap: myFun,
对于您的情况,您可以执行
onTap: () async{
await saveQuestionModel(_key, snapshot.data);
await loadQuestions(_key);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => QuizScreen(
code: _key,
index: _currentIndex,
),
),
);
},
关于dart async-await的更多信息
在你的例子中,它应该是
onTap:()async{
await saveQuestionModel();
await loadQuestions();
Navigator.push(...)
}
在这里,它等待两个函数结束执行,然后使用Navigator.push()