这在许多情况下可能会有所帮助。而不是检测触摸/点击屏障/外部警报对话框,只需执行以下操作 -
- 提取
AlertDialog
小部件并使其成为StatefulWidget
.
- A在结束/弹出时总是按顺序调用
StatefulWidget
。因此,您可以在这些功能中的任何一个(根据您的需要)中执行您想要在解除时执行的任何特定操作。deactivate()
dispose()
AlertDialog
AlertDialog
当使用 Android 后退按钮或单击 Barrier/outside 关闭时,它将为您提供帮助。您可能需要对AlertDialog
本身使用的任何按钮采取额外的预防措施,即单独检测该按钮单击,从而避免仅当 Android 后退按钮或单击 Barrier/outside 用于关闭AlertDialog
.
例如,假设您正在使用TextButton
on AlertDialog
。
TextButton(
child: const Text(
'Continue',
softWrap: true,
),
onPressed: () {
setState(() {
isContinueButtonPressed = true;
});
Navigator.of(context)
.popAndPushNamed(SomeScreen.routeName);
},
)
然后在deactivate()
and/or里面dispose()
,做这样的事情-
@override
void deactivate() {
if (!isContinueButtonPressed){
// do your actions if 'continue' button on AlertDialog is not pressed
}
super.deactivate();
}
@override
void dispose() {
if (!isContinueButtonPressed){
// do your actions if 'continue' button on AlertDialog is not pressed
}
super.dispose();
}