美文网首页
flutter进入面,直接加载Dialog失败

flutter进入面,直接加载Dialog失败

作者: 冰棍儿好烫嘴 | 来源:发表于2021-11-02 17:09 被阅读0次

    在应用中经常需要进入页面,或者进入应用直接夹在弹出框(比如新版本检测,修改密码等功能),但是在flutter中,在页面进入直接加载弹窗会失效,弹窗会弹不出来。

    原因:由于构建的问题,flutter不能在进入页面初始化的时候 直接弹出一个Dialog ,这样会报异常 因为上下文还没被构建出来,这个时候 可以使用 Future.delayed 去实现 这里不光是Dialog 只要是要先加载完的需求 都能用这个 比如一进来就要获取一个组件的位置 就需要先加载完

    具体代码:

    Future.delayed(Duration.zero, () {
            showConfirmDialog(context, title: "修改密码", ok: "修改", msg: "您的密码过于简单,请修改",
                okFunction: () async {
              Navigator.pop(context);
              push(context, PasswordModifyPage());
            });
          });
    
    showConfirmDialog(BuildContext context,
        {bool? isHtml,
        String? title,
        String? msg,
        String? cancel,
        String? ok,
        Function? cancelFunction,
        Function? okFunction}) async {
      return await showDialog<bool>(
        context: context,
        builder: (context) {
          return AlertDialog(
            title: Text(title ?? "提示"),
            content: (isHtml != null && isHtml)
                ? Html(data: msg ?? "")
                : Text(
                    msg ?? "",
                    style: MyStyle.text_style_normal,
                  ),
            actions: <Widget>[
              TextButton(
                  child: Text(cancel ?? "取消"),
                  onPressed: () {
                    if (cancelFunction != null) {
                      cancelFunction.call();
                    } else {
                      Navigator.of(context).pop();
                    }
                  } // 关闭对话框
                  ),
              TextButton(
                child: Text(ok ?? "确定"),
                onPressed: () {
                  okFunction?.call();
                  Navigator.of(context).pop();
                },
              ),
            ],
          );
        },
      );
    }
    

    相关文章

      网友评论

          本文标题:flutter进入面,直接加载Dialog失败

          本文链接:https://www.haomeiwen.com/subject/wdpialtx.html