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();
},
),
],
);
},
);
}