如何在回调函数中产生收益?

iva*_*esi 1 dart flutter bloc

请阅读这个区块片段:

if (event is TapVariant) {
  final bool isVariantCorrect = (correctVariantIndex == event.index);
  if (isVariantCorrect) {  
    yield CorrectVariant();
  } else {
    yield IncorrectVariant();
    Future.delayed(Duration(seconds: 1), () { 
      yield CorrectVariant();
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要从嵌套函数中产生 CorrectVariant。

我是这样解决的:

    yield IncorrectVariant();
    await Future.delayed(Duration(seconds: 1), () {});
    yield CorrectVariant();
Run Code Online (Sandbox Code Playgroud)

但我很好奇。

cre*_*not 6

您已经提出了最好的方法,原因如下:

  • 当您在一个async*函数中时,您可以访问await关键字,它允许您在同一范围内处理未来的回调。

  • 如果您yieldsync*函数中使用,则无论如何都不能等待回调,因为您没有运行异步代码。


从回调中返回

当您处理Future's 时,您还可以在回调中返回您的值,如下所示:

yield 1;

// The following statement will yield "2" after one second.
yield await Future.delayed(Duration(seconds: 1), () {
  return 2;
});
Run Code Online (Sandbox Code Playgroud)