我使用flutter已经有一段时间了,最近使用Get来实现状态管理。我遇到了一个问题,首先打开加载对话框,然后打开消息对话框。然后我想关闭加载对话框,但消息对话框一直关闭。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class HomeController extends GetxController {
Future<void> openAndCloseLoadingDialog() async {
showDialog(
context: Get.overlayContext,
barrierDismissible: false,
builder: (_) => WillPopScope(
onWillPop: () async => false,
child: Center(
child: SizedBox(
width: 60,
height: 60,
child: CircularProgressIndicator(
strokeWidth: 10,
),
),
),
),
);
await Future.delayed(Duration(seconds: 3));
Get.dialog(
AlertDialog(
title: Text("This should not be closed automatically"),
content: Text("This should not be closed automatically"),
actions: <Widget>[
FlatButton(
child: Text("CLOSE"),
onPressed: () {
Get.back();
},
)
],
),
barrierDismissible: false,
);
await Future.delayed(Duration(seconds: 3));
Navigator.of(Get.overlayContext).pop();
}
}
上面的代码关闭了第二个对话框,而不是我想要的第一个对话框。有人能给这个问题的建议吗?
3条答案
按热度按时间gev0vcfq1#
AlertDialog
而不是CircularProgressIndicator
被消除的原因是因为AlertDialog
在堆栈的顶部。这里你可以做的是在显示AlertDialog
之前调用Navigator.of(Get.overlayContext).pop();
来消除CircularProgressIndicator
。示例代码基于所提供的代码段。
j8ag8udp2#
我在
bottomSheet()
中使用了它,但它在Dialog
中也能很好地工作,只需向Get.back(closeOverlays: true)
添加一个参数:qncylg1j3#
尝试按以下方式使用
closeOverlays
参数: