我在屏幕加载时使用对话框。问题是,如果用户关闭对话框,然后触发对话框的弹出功能,那么它将弹出页面而不是对话框。(导航器.pop(上下文)。所以我想出了一个解决方案,使用全局键对话。现在,该函数检测是否安装了全局密钥,否则将弹出。我想知道是否有更好更短的方法。
我使用导航器.pop(上下文)弹出对话框。但如果用户在关闭对话框之前关闭对话框,则弹出的是页面而不是对话框。
void loadingDialog() {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
key: dashboardLoadingDialogKey,
backgroundColor: const Color(0xFF15000D),
content: Container(
padding: const EdgeInsets.all(15),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
const CircularProgressIndicator(
color: Colors.amber,
),
const SizedBox(height: 20),
Text(
'LOADING',
textAlign: TextAlign.center,
style: dialogAmber,
),
],
),
),
),
);
},
);
}
T型
if (response.statusCode == 200 && mounted) {
// dashboard loading dialog pop
if (dashboardLoadingDialogKey.currentContext != null &&
dashboardLoadingDialogKey.currentContext!.mounted) {
Navigator.of(dashboardLoadingDialogKey.currentContext!).pop();
}
}
这是对话框的函数,我使用全局键,这是我弹出它的方式
3条答案
按热度按时间klsxnrf11#
用户不应关闭/弹出加载对话框。因此,我将
builder
小部件 Package 为WillPopScope
,如下所示,以便它只能通过编程方式弹出:jecbmhm32#
我建议您不要通过
Navigator
来执行此操作,而只需使用Overlay
或Stack
,并在那里使用bool
来指示是否应显示覆盖。与手动推送和弹出对话框相比,这种方法与大多数状态管理系统更兼容。对于用户来说,如果它被相应地设计,它看起来是相同的。zour9fqk3#
它将弹出除基本第一路由之外的所有其他路由。如果你使用显示对话框,它会有很大的帮助。如果使用
Navigator.pop(context)
,有时由于用户交互,所有路由都会弹出。