我具有打开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());
});
}
下载所有数据后,我需要一种方法来关闭此对话框,而不是使用单击或按钮来关闭它。我该如何实现?
答案 0 :(得分:0)
简单的Navigator.of(context).pop();
就能解决问题
答案 1 :(得分:0)
这取决于您在何处触发获取数据功能
简单示例-命令:
_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),
),
)
],
),
);
},
);
}
答案 2 :(得分:0)
我认为您的问题是如何知道何时应该解雇它。当您开始向_mainBloc
发送请求时,还应该从_mainBloc
内部的流中侦听。检查响应数据,您可以使用以下任意一种方法关闭对话框:
Navigator.of(context).pop();
Navigator.pop(context);
您还可以使用它来返回对话框的结果(如果对话框为用户提供了选择)