closeModalDailog static method

void closeModalDailog(
  1. BuildContext rootContext,
  2. String dialogKey, {
  3. DialogReturnTypeEnum? returnType,
  4. 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);
    }
  }
}