closeModalDailog static method
void
closeModalDailog(
- BuildContext rootContext,
- String dialogKey, {
- DialogReturnTypeEnum? returnType,
- bool closeAll = false,
关闭指定的模态对话框
rootContext 上下文
dialogKey 对话框的唯一key
closeAll 是否关闭该dialogKey的所有弹窗,默认为false(只关闭最顶层的)
Implementation
static void closeModalDailog(
BuildContext rootContext,
String dialogKey, {
DialogReturnTypeEnum? returnType,
bool closeAll = false,
}) {
TCICLog.info(
'closeModalDailog key: $dialogKey returnType: $returnType closeAll: $closeAll',
actionModule: ActionModule.tools.name,
actionName: ActionName.showModalDailog.name,
);
final dialogContexts = _dialogContexts[dialogKey];
if (dialogContexts == null || dialogContexts.isEmpty) {
TCICLog.info(
'closeModalDailog: dialog with key $dialogKey not found',
actionModule: ActionModule.tools.name,
actionName: ActionName.showModalDailog.name,
);
return;
}
if (closeAll) {
// 关闭该dialogKey的所有弹窗(从后往前关闭,避免索引问题)
final contextsToClose = List<BuildContext>.from(dialogContexts);
for (var i = contextsToClose.length - 1; i >= 0; i--) {
final context = contextsToClose[i];
_closeSingleDialog(context, dialogKey, returnType);
}
// 清理所有实例
_dialogContexts.remove(dialogKey);
_dialogLevels.remove(dialogKey);
_dialogInstanceIds.remove(dialogKey);
} else {
// 只关闭最顶层的弹窗(最后打开的)
final topContext = dialogContexts.last;
_closeSingleDialog(topContext, dialogKey, returnType);
// 移除最后一个实例
if (dialogContexts.length > 1) {
dialogContexts.removeLast();
_dialogLevels[dialogKey]?.removeLast();
_dialogInstanceIds[dialogKey]?.removeLast();
} else {
// 如果只有一个,直接清理整个key
_cleanupDialog(dialogKey);
}
}
}