在Dart中创建异步按钮



我必须把这两个" 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()

推送下一页

最新更新