颤动-使用代码条件关闭警告对话框

时间:2019-11-19 13:50:08

标签: flutter dart

我具有打开alertDialog的功能,以防止在应用程序从服务器获取数据时用户触摸或更改:

final GlobalKey<NavigatorState> _navigationKey = GlobalKey<NavigatorState>();

Future _processing(String s) async {
    await showDialog(
      context: _navigationKey.currentState.overlay.context,
      builder: (BuildContext context) {
        // return object of type Dialog
        return AlertDialog(
            backgroundColor: Colors.transparent,
            elevation: 0,
            content: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                CircularProgressIndicator(
                  valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text(
                    s,
                    style: TextStyle(color: Colors.white),
                  ),
                )
              ],
            ));
      },
    ).then((val) {
      print('processing dialog close');
      // _mainBloc.add(SwipeProfile());
    });
  }

下载所有数据后,我需要一种方法来关闭此对话框,而不是使用单击或按钮来关闭它。我该如何实现?

3 个答案:

答案 0 :(得分:0)

简单的Navigator.of(context).pop();就能解决问题

答案 1 :(得分:0)

这取决于您在何处触发获取数据功能

简单示例-命令:

_processing() async {
    await showDialog(
      context: context,
      builder: (BuildContext context) {
        // replace "Future.delayed(Duration(seconds: 5))" with your API call
        Future.delayed(Duration(seconds: 5)).then((_) {
          Navigator.of(context).pop();
        });

        return AlertDialog(
          backgroundColor: Colors.transparent,
          elevation: 0,
          content: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              CircularProgressIndicator(
                valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text(
                  "Hi",
                  style: TextStyle(color: Colors.white),
                ),
              )
            ],
          ),
        );
      },
    );
  }

答案 2 :(得分:0)

我认为您的问题是如何知道何时应该解雇它。当您开始向_mainBloc发送请求时,还应该从_mainBloc内部的流中侦听。检查响应数据,您可以使用以下任意一种方法关闭对话框:

Navigator.of(context).pop();
Navigator.pop(context);

您还可以使用它来返回对话框的结果(如果对话框为用户提供了选择)