Flutter中如何检测AlertDialog是点击遮罩还是按钮回调关闭的?
如何通过AlertDialog的then()回调区分关闭方式?
完全可以实现,你只需要在调用Navigator.pop()时传入不同的标识参数,就能在then()回调里根据返回值区分AlertDialog的关闭方式。
具体做法是:给不同关闭操作对应的pop()方法传入独一无二的标识值,外部遮罩关闭时默认返回null(因为AlertDialog的barrierDismissible默认开启,此时系统会自动调用pop(null))。
修改后的代码示例:
showDialog(context: context, builder: (context) => AlertDialog( title: Text('Grant access'), actions: [ // Button 'A' - 继续操作 OutlinedButton(onPressed: (){ // 传入标识值'grant_access' Navigator.of(context).pop('grant_access'); // 这里可以保留你的其他代码 }, child: Text('Grant access')), // Button 'B' - 取消操作 OutlinedButton(onPressed: () { // 传入标识值'cancel' Navigator.of(context).pop('cancel'); }, child: Text('Cancel')) ], )).then((value) async { // 根据返回值判断关闭方式 if (value == 'grant_access') { // 处理点击按钮A后的逻辑 print('用户点击了Grant access按钮'); } else if (value == 'cancel') { // 处理点击按钮B后的逻辑 print('用户点击了Cancel按钮'); } else { // value为null,对应点击外部遮罩关闭的情况 print('用户点击外部遮罩关闭了弹窗'); } });
这样就能精准区分三种关闭方式,在then()里执行对应的依赖逻辑。
内容的提问来源于stack exchange,提问作者Kdon
相关产品推荐
相关产品推荐

