GeWuYou 5ef6145688 fix(ui): 修复UiRouterBase弹出栈时目标UI键可空性问题
- 将topUiKey重命名为leavingUiKey以提高代码可读性
- 修改nextUiKey逻辑使其在栈中只有一个元素时返回null而非抛出异常
- 更新CreateEvent方法参数toUiKey为可空字符串类型
- 调整UiTransitionEvent中的ToUiKey属性为可空字符串类型
- 添加注释说明nextUiKey现在是可选的
- 格式化代码缩进和换行以提高可读性
2026-01-20 19:12:45 +08:00

105 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using GFramework.Game.Abstractions.enums;
namespace GFramework.Game.Abstractions.ui;
/// <summary>
/// UI切换事件包含UI切换过程中的上下文信息
/// </summary>
public sealed class UiTransitionEvent
{
/// <summary>
/// 用户自定义数据字典用于Handler之间传递数据
/// </summary>
private readonly Dictionary<string, object> _context = new(StringComparer.Ordinal);
/// <summary>
/// 源UI的标识符切换前的UI key
/// </summary>
public string FromUiKey { get; init; } = string.Empty;
/// <summary>
/// 目标UI的标识符切换后的UI key
/// </summary>
public string? ToUiKey { get; init; } = string.Empty;
/// <summary>
/// UI切换类型
/// </summary>
public UiTransitionType TransitionType { get; init; }
/// <summary>
/// UI切换策略
/// </summary>
public UiTransitionPolicy Policy { get; init; }
/// <summary>
/// UI进入参数
/// </summary>
public IUiPageEnterParam? EnterParam { get; init; }
/// <summary>
/// 获取用户自定义数据
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="key">数据键</param>
/// <param name="defaultValue">默认值(当键不存在或类型不匹配时返回)</param>
/// <returns>用户数据</returns>
public T Get<T>(string key, T defaultValue = default!)
{
if (_context.TryGetValue(key, out var obj) && obj is T value)
return value;
return defaultValue;
}
/// <summary>
/// 尝试获取用户自定义数据
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="key">数据键</param>
/// <param name="value">输出值</param>
/// <returns>是否成功获取</returns>
public bool TryGet<T>(string key, out T value)
{
if (_context.TryGetValue(key, out var obj) && obj is T t)
{
value = t;
return true;
}
value = default!;
return false;
}
/// <summary>
/// 设置用户自定义数据
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="key">数据键</param>
/// <param name="value">数据值</param>
public void Set<T>(string key, T value)
{
_context[key] = value!;
}
/// <summary>
/// 检查是否存在指定的用户数据键
/// </summary>
/// <param name="key">数据键</param>
/// <returns>是否存在</returns>
public bool Has(string key)
{
return _context.ContainsKey(key);
}
/// <summary>
/// 移除指定的用户数据
/// </summary>
/// <param name="key">数据键</param>
/// <returns>是否成功移除</returns>
public bool Remove(string key)
{
return _context.Remove(key);
}
}