【问题标题】:Delay state check inside Flutter bloc listenerFlutter bloc监听器中的延迟状态检查
【发布时间】:2020-03-27 07:58:51
【问题描述】:

我通过一个块向服务器发送数据,并在此期间显示progressSnackBar,然后在成功时显示successSnackBar。有时这需要不到一秒钟的时间,根本不显示progressSnackBar 是有意义的 - 换句话说等待一秒钟,然后检查状态是否仍然是UpdatingAccount强>。我已经尝试过涉及Future.delay(...) 的不同组合但失败了,我可能可以做一个setState hack,但是有没有办法在 bloc 监听器内部实现这一点?

BlocListener<AccountBloc, AccountState>(
  listener: (BuildContext context, state) {
    if (state is UpdatingAccount) { // <-- delay this
      Scaffold.of(context)
        ..hideCurrentSnackBar()
        ..showSnackBar(progressSnackBar());
    } else if (state is AccountUpdated) {
      Scaffold.of(context)
        ..hideCurrentSnackBar()
        ..showSnackBar(successSnackBar());
    }
  },
  // rest...
),

【问题讨论】:

  • 您能否将 1 秒等待逻辑放入您的 BLOC 中?您可以生成两次 UpdatingAccount 并添加经过的时间,以便您的听众可以决定是否应该显示进度。如果该过程在 1 秒内完成,则只需省略第二个产量。还是 BLOC 内部的流量控制被认为是不好的做法?我对这种模式还有些陌生。

标签: flutter dart bloc flutter-bloc


【解决方案1】:

您可以在 state is UpdatingAccount 条件下执行 Future.delay() 并再次检查状态。

if (state is UpdatingAccount) { 
  Future.delayed(Duration(seconds: 1), (){
    if(state is "UpdatingAccount"){
      Scaffold.of(context)
        ..hideCurrentSnackBar()
        ..showSnackBar(progressSnackBar());
    }
  });
}

【讨论】:

  • 就像我提到的,Future.delay()ing 似乎不起作用。
【解决方案2】:

我最终使小部件有状态,并给它一个_updated bool 成员。

BlocListener<AccountBloc, AccountState>(
  listener: (BuildContext context, state) {
    if (state is UpdatingAccount) {
      _updated = false;
      Future.delayed(Duration(seconds: 1), () {
        if (!_updated) {
          Scaffold.of(context)
            ..hideCurrentSnackBar()
            ..showSnackBar(progressSnackBar());
        }
      });
    } else if (state is AccountUpdated) {
      _updated = true;
      Scaffold.of(context)
        ..hideCurrentSnackBar()
        ..showSnackBar(successSnackBar());
    }
  },
  // rest...
),

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2020-03-26
    • 2022-10-23
    • 2020-04-29
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多