refactor:规范代码格式和注释
This commit is contained in:
@@ -4,14 +4,20 @@ using Hua.Todo.Maui.Services;
|
||||
|
||||
namespace Hua.Todo.Maui.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// 应用程序主页面。
|
||||
/// 该页面承载 WebView(前端 UI),并通过 JavaScript 注入与事件机制实现与 MAUI 的通讯。
|
||||
/// </summary>
|
||||
public partial class MainPage : ContentPage
|
||||
{
|
||||
private readonly AppSettings _appSettings;
|
||||
private readonly IEmbeddedWebServerService? _webServer;
|
||||
#if WINDOWS
|
||||
private Platforms.Windows.WindowsKeyboardHandler? _keyboardHandler;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// 创建 <see cref="MainPage"/>。
|
||||
/// </summary>
|
||||
/// <param name="appSettings">应用配置。</param>
|
||||
/// <param name="webServer">嵌入式 Web 服务器服务(在不同平台可能为不同实现)。</param>
|
||||
public MainPage(AppSettings appSettings, IEmbeddedWebServerService webServer)
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -23,7 +29,10 @@ namespace Hua.Todo.Maui.Views
|
||||
SetupKeyboardHandler();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设置 WebView 数据源。
|
||||
/// 当启用嵌入式服务器且使用静态文件时,直接指向本地服务器;否则使用配置的前端 URL。
|
||||
/// </summary>
|
||||
private void SetupWebViewSource()
|
||||
{
|
||||
if (_appSettings.WebServer.IsUsingStatic)
|
||||
@@ -38,27 +47,32 @@ namespace Hua.Todo.Maui.Views
|
||||
MainWebView.Source = NormalizeUrl(_appSettings.WebServer.ForEndUrl);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置键盘处理器(平台差异通过分部类实现)。
|
||||
/// </summary>
|
||||
private void SetupKeyboardHandler()
|
||||
{
|
||||
#if WINDOWS
|
||||
_keyboardHandler = new Platforms.Windows.WindowsKeyboardHandler();
|
||||
_keyboardHandler.EscKeyPressed += OnEscKeyPressed;
|
||||
_keyboardHandler.Start();
|
||||
#endif
|
||||
PlatformSetupKeyboardHandler();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当 Esc 键按下时的回调
|
||||
/// </summary>
|
||||
private void OnEscKeyPressed(object? sender, EventArgs e)
|
||||
{
|
||||
var window = Microsoft.Maui.Controls.Application.Current?.Windows.FirstOrDefault();
|
||||
if (window != null)
|
||||
{
|
||||
#if WINDOWS
|
||||
var windowService = new Platforms.Windows.WindowsWindowService();
|
||||
windowService.MinimizeWindow(window);
|
||||
#endif
|
||||
PlatformOnEscKeyPressed(window);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置 WebView 通讯逻辑。
|
||||
/// 约定:
|
||||
/// - 通过 window.__API_BASE_URL__ 注入后端 API 基地址(仅在嵌入式服务器运行时)
|
||||
/// - 通过自定义事件在 Web 与 MAUI 间传递热键配置等数据
|
||||
/// </summary>
|
||||
private void SetupWebViewCommunication()
|
||||
{
|
||||
MainWebView.Navigated += async (s, e) =>
|
||||
@@ -76,6 +90,7 @@ namespace Hua.Todo.Maui.Views
|
||||
await MainWebView.EvaluateJavaScriptAsync($"window.__API_BASE_URL__ = '{apiBase}';");
|
||||
}
|
||||
|
||||
// 注入前端与 MAUI 的通讯桥(事件名/字段名属于协议的一部分,修改需同步前端)。
|
||||
await MainWebView.EvaluateJavaScriptAsync(@"
|
||||
window.mauiInterop = {
|
||||
onHotKeyConfigUpdated: null,
|
||||
@@ -100,6 +115,10 @@ namespace Hua.Todo.Maui.Views
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 规格化 URL(针对 Android 模拟器处理 localhost)。
|
||||
/// Android 模拟器中 localhost 指向模拟器自身,需要替换为 10.0.2.2 才能访问宿主机服务。
|
||||
/// </summary>
|
||||
private static string NormalizeUrl(string url)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(url)) return url;
|
||||
@@ -116,5 +135,16 @@ namespace Hua.Todo.Maui.Views
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
// 平台特定分部方法声明(实现位于 Platforms/* 目录)
|
||||
/// <summary>
|
||||
/// 平台特定的键盘处理器初始化。
|
||||
/// </summary>
|
||||
partial void PlatformSetupKeyboardHandler();
|
||||
/// <summary>
|
||||
/// 平台特定的 Esc 键处理逻辑。
|
||||
/// </summary>
|
||||
/// <param name="window">当前窗口。</param>
|
||||
partial void PlatformOnEscKeyPressed(Window window);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user