【问题标题】:How to create progress dialog while executing task and after complete task dialog should be dismiss?如何在执行任务时创建进度对话框,完成任务对话框后应该关闭?
【发布时间】:2019-09-01 16:40:24
【问题描述】:

如何添加进度条?

点击按钮后,我需要在执行任务时显示一个进度条,完成任务后,如果成功登录,对话框应该被关闭并移动到下一页。

在凸起的按钮中:

onPressed: () async {
  (isOffline)
  ? showSnackBar(context)
  : checkingValidation(usernameController, context, _url);
}


checkingValidation(TextEditingController usernameController, BuildContext context, String _url) async {
if(....){
...
}else{
    Navigator.push(
       context,
       MaterialPageRoute(
       builder: (context) => HomePage()))
}

【问题讨论】:

    标签: dart flutter async-await


    【解决方案1】:

    您应该使用Stack 并在其中根据需要使用警报对话框。 添加bool showProgress 之类的标志,当您需要显示或隐藏进度警报对话框时,只需在setState 中分别设置showProgress=trueshowProgress=false 即可显示或隐藏警报对话框小部件。

    或者干脆使用我创建的这个模板。

      static showProgressDialog(BuildContext context, String title) {
        try {
          showDialog(
              context: context,
              barrierDismissible: false,
              builder: (context) {
                return AlertDialog(
                  content: Flex(
                    direction: Axis.horizontal,
                    children: <Widget>[
                      CircularProgressIndicator(),
                      Padding(padding: EdgeInsets.only(left: 15),),
                      Flexible(
                          flex: 8,
                          child: Text(
                            title,
                            style: TextStyle(
                                fontSize: 16, fontWeight: FontWeight.bold),
                          )),
                    ],
                  ),
                );
              });
        } catch (e) {
          print(e.toString());
        }
      }
    

    当您想显示此内容时,只需调用 AppUtils.showProgressDialog(context, "Please wait");

    当你完成任务后,只需拨打Navigator.pop(context);

    您可以创建一个AppUtils 的类并将此模板放在类中,这样您就可以在应用程序的任何地方重复使用它。

    【讨论】:

    • 正如我所说,创建一个任意名称的类,例如AppUtils 将该函数放在该类中。然后,每当您需要显示进度对话框时,只需在完成任务调用 Navigator.pop 时调用 AppUtils.showProgressDialog(context, "Please wait"); 即可关闭警报对话框
    • 谢谢。它运作良好。但我很困惑,因为我在单击按钮时调用了 AppUtils,并且我调用了 navigator.pop 的每个验证语句
    • 没有得到什么问题,你能解释一下并添加一些代码。
    • checking2(TextEditingController usernameController, BuildContext context, String _url) async { AppUtils.showProgressDialog(context, "Please wait");
    • 每一个 showDialog if (model.data.hasAccess == 0) { Navigator.pop(context); showDialog(
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多