未收到扑扑状态

时间:2019-12-25 16:25:28

标签: flutter

我喜欢这个很好的例子:https://resocoder.com/2019/04/06/flutter-nosql-database-sembast-tutorial-w-bloc/

如果表明您可以执行以下操作:

if (event is LoadFruits) {
  // Indicating that fruits are being loaded - display progress indicator.
  yield FruitsLoading();
  yield* _reloadFruits();
}

尽管在示例中它起作用,但是当我将其部署到我的应用程序中时,我注意到BlocBuilder并不总是收到第一个FruitsLoading状态

我的情况几乎与我要做的差不多:

  yield ReceiptUpdated(updatedReceipt);
  yield* _reloadReceipts();

即主要区别是我随事件通过了记录。

我注意到以下情况:

  1. 在运行带有断点的调试器时,ReceiptUpdated将被接收,并且应用程序正常运行(这表明在框架级别存在竞争状况)

  2. 以正常模式运行,并注释行yield* _reloadReceipts();将导致接收到ReceiptUpdated

  3. 更改顺序:

    yield * _reloadReceipts();   产生ReceiptUpdated(updatedReceipt);

将导致接收到ReceiptUpdated,但是丢失了ReceiptsLoaded

  • 这是一个错误吗?

  • 像示例中一样,yield的一个接一个声明是合法的吗?

有人可以阐明这一点吗?

注意:

我有3个屏幕a,b,c,其中b和c都是a的子屏幕。

拍照后,我立即使用屏幕b拍摄收据的图片:

  1. 收据已上传到SRV

  2. 该应用会弹出回到,其中列出了新收据

然后,当您在屏幕a上单击收据时,它会显示u屏幕c上的收据,其中显示了一个CircleProgressIndicator,直到上传完成为止,这触发了ReceiptUpdated被触发(但未收到...)

我发现奇怪的是,即使没有ReceiptUpdated状态,收据也应该进行了更新,因为父级(a)从数据库接收到带有新数据的ReceiptsLoaded,并重建自身及其子级。

如果我停留在屏幕b上,至少这是这样的。

所以它要么是非常令人迷惑的功能,要么是错误,或者我做的是完全错误的事情。

有人可以帮我解决这个问题吗?

注意2:

我通过引入新状态NeedReloadReceipt并添加代码来解决此问题:

      if (state is ReceiptUpdated) {
        _receiptBloc.dispatch(NeedReloadReceipt());
      }

在我的应用主构建器中

这样我只需要在集团中解雇ReceiptUpdated,并且仅在收到ReceiptsLoaded之后解雇ReceiptUpdated

0 个答案:

没有答案