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

2021-11-02  本文已影响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();
            },
          ),
        ],
      );
    },
  );
}
上一篇下一篇

猜你喜欢

热点阅读