Flutter bloc侦听器内部的延迟状态检查

问题描述 投票:1回答:1

我正在通过集团向服务器发送数据,并在过程中显示progressSnackBar,然后显示successSnackBar。有时,此过程不到一秒钟,因此完全不显示progressSnackBar是有意义的-换句话说,等待一秒钟,然后检查状态是否仍为UpdatingAccount。我尝试过涉及Future.delay(...)的不同组合,但均以失败告终,我可能可以进行setState骇客攻击,但有没有办法仅在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...
),
flutter dart bloc flutter-bloc
1个回答
0
投票

您可以在Future.delay()状态下进行state is UpdatingAccount,然后再次检查状态。

if (state is UpdatingAccount) { 
  Future.delayed(Duration(seconds: 1), (){
    if(state is "UpdatingAccount"){
      Scaffold.of(context)
        ..hideCurrentSnackBar()
        ..showSnackBar(progressSnackBar());
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.