gpt4 book ai didi

flutter - 如何关闭特定的对话框

转载 作者:行者123 更新时间:2023-12-05 05:46:34 24 4
gpt4 key购买 nike

我正在从另一个对话框打开一个对话框并试图关闭第一个对话框,但它正在关闭最近的对话框。同类git issue .

我试过了

  • ValueKey 放在 AlertDialog
  • 在弹出时使用 rootNavigator:true
  • context 保存到变量中并执行 Navigator.of(specifiqContext).pop()

但是它们都不起作用。在 dartPad 上重现问题的代码.

class MultiDialogTest extends StatefulWidget {
const MultiDialogTest({Key? key}) : super(key: key);

@override
State<MultiDialogTest> createState() => _MultiDialogTestState();
}

class _MultiDialogTestState extends State<MultiDialogTest> {
BuildContext? dialog1Context, dialog2Context;

Future<void> _showDialog1(BuildContext context) async {
await showDialog(
context: context,
barrierDismissible: false,
builder: (c) {
dialog1Context = c;
return AlertDialog(
key: const ValueKey("dialog 1"),
title: const Text("Dialog 1"),
content: ElevatedButton(
child: const Text("close dialog2"),
onPressed: () {
if (dialog2Context != null) {
Navigator.of(dialog2Context!,).pop();
}
},
),
actions: [
ElevatedButton(
child: const Text("close this"),
onPressed: () {
Navigator.of(c, rootNavigator: true).pop();
},
),
],
);
});

dialog1Context = null;
}

Future<void> _showDialog2(BuildContext context) async {
await showDialog(
context: context,
barrierDismissible: false,
builder: (c) {
dialog2Context = c;
return AlertDialog(
key: const ValueKey("dialog 2"),
title: const Text("Dialog 2"),
actions: [
ElevatedButton(
child: const Text("close this"),
onPressed: () {
Navigator.of(c, rootNavigator: true).pop();
},
),
],
content: Column(
children: [
ElevatedButton(
onPressed: () async {
await _showDialog1(context);
},
child: const Text("Open dialog 1"),
),
],
),
);
});
dialog2Context = null;
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
_showDialog2(context);
},
child: const Text("show dialog 2"),
),
),
);
}
}

如何在不关闭上面的对话框(Dialog 1)的情况下关闭下面的对话框(Dialog 2)。

I don't like to close both and reopen the Dialog 1.

enter image description here

最佳答案

您需要传递要关闭的对话框的上下文 (parentContext) 并调用:

Navigator.pop(parentContext); // close parent 
Navigator.pop(context); // close current

关于flutter - 如何关闭特定的对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71155176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com