如何产生内部回调函数?

时间:2019-08-16 15:00:42

标签: flutter dart 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();
    });
  }
}

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

我这样解决了:

    yield IncorrectVariant();
    await Future.delayed(Duration(seconds: 1), () {});
    yield CorrectVariant();

但是我很好奇。

1 个答案:

答案 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;
});