mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-25 04:59:01 +08:00
feat(ui): 更新UiRouterBase以支持基于键值的页面导航
- 添加PeekKey方法获取页面栈顶元素的键值 - 修改Peek方法返回IUiPageBehavior对象而不是类型名称 - 更新IsTop和Contains方法使用键值比较替代类型名比较 - 在UiTransitionEvent中使用PeekKey获取来源UI键值 - 为CanvasItemUiPageBehavior添加key参数和Key属性实现 - 在IUiPageBehavior接口中定义Key属性 - 更新IUiRouter接口定义新的PeekKey和Peek方法 - 添加必要的using引用和异步任务配置
This commit is contained in:
parent
9c27aa5927
commit
0a924725a5
@ -11,6 +11,13 @@ public interface IUiPageBehavior
|
|||||||
/// <returns>页面视图实例</returns>
|
/// <returns>页面视图实例</returns>
|
||||||
object View { get; }
|
object View { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取键值
|
||||||
|
/// </summary>
|
||||||
|
/// <value>返回当前对象的键标识符</value>
|
||||||
|
string Key { get; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取页面是否处于活动状态
|
/// 获取页面是否处于活动状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -80,7 +80,14 @@ public interface IUiRouter : ISystem
|
|||||||
/// 获取当前栈顶UI的Key
|
/// 获取当前栈顶UI的Key
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>当前UI Key,如果栈为空返回空字符串</returns>
|
/// <returns>当前UI Key,如果栈为空返回空字符串</returns>
|
||||||
string Peek();
|
string PeekKey();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取当前栈顶的UI页面行为对象
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>栈顶的IUiPageBehavior对象,如果栈为空则返回null</returns>
|
||||||
|
IUiPageBehavior Peek();
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 判断指定UI是否为当前栈顶UI
|
/// 判断指定UI是否为当前栈顶UI
|
||||||
|
|||||||
@ -1,3 +1,7 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using GFramework.Core.Abstractions.logging;
|
using GFramework.Core.Abstractions.logging;
|
||||||
using GFramework.Core.extensions;
|
using GFramework.Core.extensions;
|
||||||
using GFramework.Core.logging;
|
using GFramework.Core.logging;
|
||||||
@ -201,15 +205,26 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
AfterChange(@event);
|
AfterChange(@event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取栈顶元素的视图类型名称
|
/// 获取页面栈顶元素的键值,但不移除该元素
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>如果栈为空则返回空字符串,否则返回栈顶元素视图类型的名称</returns>
|
/// <returns>如果页面栈为空则返回空字符串,否则返回栈顶元素的键值</returns>
|
||||||
public string Peek()
|
public string PeekKey()
|
||||||
{
|
{
|
||||||
return _stack.Count == 0 ? string.Empty : _stack.Peek().View.GetType().Name;
|
return _stack.Count == 0 ? string.Empty : _stack.Peek().Key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取页面栈顶元素,但不移除该元素
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>返回栈顶的IUiPageBehavior元素</returns>
|
||||||
|
public IUiPageBehavior Peek()
|
||||||
|
{
|
||||||
|
return _stack.Peek();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 判断栈顶元素是否指定的UI类型
|
/// 判断栈顶元素是否指定的UI类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -217,10 +232,7 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
/// <returns>如果栈为空或栈顶元素类型不匹配则返回false,否则返回true</returns>
|
/// <returns>如果栈为空或栈顶元素类型不匹配则返回false,否则返回true</returns>
|
||||||
public bool IsTop(string uiKey)
|
public bool IsTop(string uiKey)
|
||||||
{
|
{
|
||||||
if (_stack.Count == 0)
|
return _stack.Count != 0 && _stack.Peek().Key.Equals(uiKey);
|
||||||
return false;
|
|
||||||
|
|
||||||
return _stack.Peek().View.GetType().Name == uiKey;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -230,7 +242,7 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
/// <returns>如果栈中存在指定类型的UI元素则返回true,否则返回false</returns>
|
/// <returns>如果栈中存在指定类型的UI元素则返回true,否则返回false</returns>
|
||||||
public bool Contains(string uiKey)
|
public bool Contains(string uiKey)
|
||||||
{
|
{
|
||||||
return _stack.Any(p => p.View.GetType().Name == uiKey);
|
return _stack.Any(p => p.Key.Equals(uiKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -265,7 +277,7 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
{
|
{
|
||||||
return new UiTransitionEvent
|
return new UiTransitionEvent
|
||||||
{
|
{
|
||||||
FromUiKey = Peek(),
|
FromUiKey = PeekKey(),
|
||||||
ToUiKey = toUiKey,
|
ToUiKey = toUiKey,
|
||||||
TransitionType = type,
|
TransitionType = type,
|
||||||
Policy = policy ?? UiTransitionPolicy.Exclusive,
|
Policy = policy ?? UiTransitionPolicy.Exclusive,
|
||||||
@ -289,7 +301,7 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
private void AfterChange(UiTransitionEvent @event)
|
private void AfterChange(UiTransitionEvent @event)
|
||||||
{
|
{
|
||||||
Log.Debug("AfterChange phases started: {0}", @event.TransitionType);
|
Log.Debug("AfterChange phases started: {0}", @event.TransitionType);
|
||||||
_ = Task.Run(async () =>
|
_ = Task.Run<Task>(async () =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@ -9,16 +9,24 @@ namespace GFramework.Godot.ui;
|
|||||||
/// 支持所有继承自 CanvasItem 的节点
|
/// 支持所有继承自 CanvasItem 的节点
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T">CanvasItem 类型的视图节点</typeparam>
|
/// <typeparam name="T">CanvasItem 类型的视图节点</typeparam>
|
||||||
public class CanvasItemUiPageBehavior<T>(T owner) : IUiPageBehavior
|
public class CanvasItemUiPageBehavior<T>(T owner, string key) : IUiPageBehavior
|
||||||
where T : CanvasItem
|
where T : CanvasItem
|
||||||
{
|
{
|
||||||
private readonly IUiPage? _page = owner as IUiPage;
|
private readonly IUiPage? _page = owner as IUiPage;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 页面视图对象
|
/// 获取页面视图对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <returns>返回与当前实例关联的视图对象</returns>
|
||||||
public object View => owner;
|
public object View => owner;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取当前实例的键值标识符
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>返回用于标识当前实例的键字符串</returns>
|
||||||
|
public string Key => key;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取页面是否存活状态
|
/// 获取页面是否存活状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user