请阅读以下集团片段:
if (event is TapVariant) {
final bool isVariantCorrect = (correctVariantIndex == event.index);
if (isVariantCorrect) {
yield CorrectVariant();
} else {
yield IncorrectVariant();
Future.delayed(Duration(seconds: 1), () {
yield CorrectVariant();
});
}
}
我需要从嵌套函数中产生CorrectVariant。
我这样解决了:
yield IncorrectVariant();
await Future.delayed(Duration(seconds: 1), () {});
yield CorrectVariant();
但是我很好奇。
答案 0 :(得分:2)
您已经介绍了最佳方法,这就是原因:
就像在使用async*
函数一样,您可以访问await
关键字,该关键字使您可以在同一范围内处理将来的回调。
如果您在yield
函数中使用了sync*
,则由于您未运行异步代码,因此您始终无法等待回调。
在处理Future
时,您还可以像这样在回调中返回您的值:
yield 1;
// The following statement will yield "2" after one second.
yield await Future.delayed(Duration(seconds: 1), () {
return 2;
});