Future<int> _show() async {
return await showDialog<int>(
context: context,
builder: (_) {
return AlertDialog(
actions: [
RaisedButton(
onPressed: () => Navigator.pop(context, 1), // returning 1
child: Text('1'),
),
RaisedButton(
onPressed: () => Navigator.pop(context, 2), // returning 2
child: Text('2'),
),
],
);
},
);
}
我将此函数称为:
int value = await _show();
当用户在对话框外点击以将其关闭时,问题就来了。在这种情况下,以上value
返回null
。如果发生这种情况,我想返回0
。我拥有的解决方案是:
barrierDismissible: false
。value
是否为空,并通过单击外部区域来推断该对话框已关闭。但是除了这些之外,还有什么更好的方法或任何对话框可禁用的侦听器,如果通过轻按外部区域来关闭对话框而无法返回Navigator.pop(0)
,则是这样的:
showDialog(
context: context,
onDialogDismissed: () {
Navigator.pop(0);
}
);
答案 0 :(得分:0)
我不认为您想要的东西存在。我认为最接近优雅期望的是:
Future<int> _show() async {
return await showDialog<int>(
context: context,
builder: (_) {
return AlertDialog(
actions: [
RaisedButton(
onPressed: () => Navigator.pop(context, 1), // returning 1
child: Text('1'),
),
RaisedButton(
onPressed: () => Navigator.pop(context, 2), // returning 2
child: Text('2'),
),
],
);
},
) ?? 0;
}