feat(ui): 添加UI层级管理和优化Peek方法

- 修改Peek方法返回类型为可空IUiPageBehavior?以避免空栈异常
- 在IUiRouter接口中添加完整的UI层级管理功能
- 新增Show方法支持在指定层级显示UI(Overlay/Modal/Toast等)
- 新增Hide方法支持隐藏指定层级的UI
- 新增ClearLayer方法支持清空指定层级的所有UI
- 新增GetFromLayer方法支持从指定层级获取UI实例
- 新增HasVisibleInLayer方法支持判断指定层级是否存在可见UI
- 完善UI路由系统的层级控制能力
- [release ci]
This commit is contained in:
GeWuYou 2026-02-02 22:19:31 +08:00
parent 3ad4913f9e
commit dadda8803f
2 changed files with 41 additions and 3 deletions

View File

@ -103,7 +103,7 @@ public interface IUiRouter : ISystem
/// 获取当前栈顶的UI页面行为对象
/// </summary>
/// <returns>栈顶的IUiPageBehavior对象如果栈为空则返回null</returns>
IUiPageBehavior Peek();
IUiPageBehavior? Peek();
/// <summary>
@ -137,4 +137,42 @@ public interface IUiRouter : ISystem
void RemoveGuard(IUiRouteGuard guard);
#endregion
#region Layer UI
/// <summary>
/// 在指定层级显示UIOverlay / Modal / Toast等
/// </summary>
void Show(
string uiKey,
UiLayer layer,
IUiPageEnterParam? param = null,
UiInstancePolicy instancePolicy = UiInstancePolicy.Reuse);
/// <summary>
/// 在指定层级显示UI基于已存在实例
/// </summary>
void Show(IUiPageBehavior page, UiLayer layer);
/// <summary>
/// 隐藏指定层级的UI
/// </summary>
void Hide(string uiKey, UiLayer layer, bool destroy = false);
/// <summary>
/// 清空指定层级的所有UI
/// </summary>
void ClearLayer(UiLayer layer, bool destroy = false);
/// <summary>
/// 从指定层级获取UI实例
/// </summary>
IUiPageBehavior? GetFromLayer(string uiKey, UiLayer layer);
/// <summary>
/// 判断指定层级是否存在可见UI
/// </summary>
bool HasVisibleInLayer(UiLayer layer);
#endregion
}

View File

@ -267,9 +267,9 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
/// 获取页面栈顶元素,但不移除该元素
/// </summary>
/// <returns>返回栈顶的IUiPageBehavior元素</returns>
public IUiPageBehavior Peek()
public IUiPageBehavior? Peek()
{
return _stack.Peek();
return _stack.Count == 0 ? null : _stack.Peek();
}