Flutter:对话框位于导航器(堆栈)顶部吗?

时间:2018-10-29 13:09:52

标签: asynchronous flutter

如何确定正在显示某个对话框还是堆栈顶部是一个对话框?

我有一个async函数,该函数可以推送一个对话框(如带有加载对话框的发布请求)。当响应到来时,加载对话框closed(pop),然后推送消息对话框。

但问题是:
如果我发送多个请求,有时加载屏幕会停留在顶部...

2 个答案:

答案 0 :(得分:0)

您可以通过进行一些验证来检查Dialog是否在Navigator对象的顶部:

void _verifyDialog(context) {
    var _isDialogOnTop = false;
    var stackCount = 0;

    Navigator.popUntil(context, (route) {
      if (!_isDialogOnTop && route.toString().contains("_DialogRoute")) {
        _isDialogOnTop = true;
      }
      else{
        stackCount++;
      }

      return _isDialogOnTop || stackCount > 0;
    });

    print (_isDialogOnTop);
  }

答案 1 :(得分:0)

bool dialogIsVisible(BuildContext context) {
  bool isVisible = false;
  Navigator.popUntil(context, (route) {
    isVisible = route is PopupRoute;
    return !isVisible;
  });
  return isVisible;
}