使用代码条件解除alertdialog



我有一个打开alertDialog的功能,以防止用户在应用程序从服务器获取数据时触摸或更改:

final GlobalKey<NavigatorState> _navigationKey = GlobalKey<NavigatorState>();
Future _processing(String s) async {
await showDialog(
context: _navigationKey.currentState.overlay.context,
builder: (BuildContext context) {
// return object of type Dialog
return AlertDialog(
backgroundColor: Colors.transparent,
elevation: 0,
content: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
s,
style: TextStyle(color: Colors.white),
),
)
],
));
},
).then((val) {
print('processing dialog close');
// _mainBloc.add(SwipeProfile());
});
}

我需要一种在下载完所有数据后关闭此对话框的方法,而不是使用单击或按钮来关闭它。我如何实现这一点?

一个简单的Navigator.of(context).pop();完成

这取决于在哪里触发提取数据函数

简单示例-命令:

_processing() async {
await showDialog(
context: context,
builder: (BuildContext context) {
// replace "Future.delayed(Duration(seconds: 5))" with your API call
Future.delayed(Duration(seconds: 5)).then((_) {
Navigator.of(context).pop();
});
return AlertDialog(
backgroundColor: Colors.transparent,
elevation: 0,
content: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Hi",
style: TextStyle(color: Colors.white),
),
)
],
),
);
},
);
}

我想你的问题是如何知道什么时候应该驳回它。当你开始请求_mainBloc时,你也应该从_mainBloc内部的流中侦听。检查响应数据,您可以使用以下任何一项来关闭对话框:

Navigator.of(context).pop();
Navigator.pop(context);

您也可以使用它来返回对话框的结果(如果它向用户提供了选择(

最新更新