目的是展示一个
Dialog
在等待
Stream
为了释放一个值,我构建了一个简单的实用函数。
这个函数需要一段时间
(广播)
stream
,并将显示加载
对话
直到发出第一个值。然后订阅被取消,对话框将自动关闭,这样我就不用担心了。
static void wrapStreamWithLoadingModal(BuildContext context, {@required Stream stream}) {
BuildContext dialogContext;
StreamSubscription subscription;
subscription = stream.listen((_) {
subscription.cancel();
if (dialogContext != null) {
Navigator.pop(dialogContext);
}
}, onError: (error) {
subscription.cancel();
if (dialogContext != null) {
Navigator.pop(dialogContext);
}
});
showCupertinoDialog(
context: context,
builder: (BuildContext dContext) {
dialogContext = dContext;
return Center(
child: Container(
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(5.0), color: Colors.white),
padding: EdgeInsets.all(10.0),
width: 120.0,
height: 100.0,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
new Text('Loading...'),
new CircularProgressIndicator(),
],
),
),
);
},
);
}
除了一种情况外,这种方法工作得非常好:当对话框打开时,如果流发射
存在
这意味着它还没有出现在屏幕上,然后我引用了它的
BuildContext
是空的,我不能忽略任何东西。
如何知道对话框何时成功呈现?还是阻止这件事?还有,也许我应该用一些
key
与其参考上下文,不如随意提出建议。