我正在通过集团向服务器发送数据,并在过程中显示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...
),
答案 0 :(得分:1)
我最终使该小部件成为有状态的,并为其赋予了_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...
),
答案 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());
}
});
}