Manager API
Wails v3 的 Manager API 提供了一種有組織且易於發現的方式,透過專注的管理器結構體來存取應用程式的功能。這個新的 API 結構將相關方法分組,同時完全維持與傳統 App API 的向後相容性。
Manager API 將應用程式功能組織成十一個專注的領域:
app.Window- 視窗建立、管理與回調app.ContextMenu- 右鍵選單註冊與管理app.KeyBinding- 全域快捷鍵管理app.Browser- 瀏覽器整合(開啟 URL 和檔案)app.Env- 環境資訊與系統狀態app.Dialog- 檔案與訊息對話框操作app.Event- 自訂事件處理與應用程式事件app.Menu- 應用程式選單管理app.Screen- 螢幕管理與座標轉換app.Clipboard- 剪貼簿文字操作app.SystemTray- 系統匣圖示建立與管理
- 更好的可發現性 - IDE 自動完成功能顯示有組織的 API 介面
- 改善的程式碼組織 - 相關方法分組在一起
- 增強的可維護性 - 各管理器之間的關注點分離
- 未來可擴展性 - 更容易向特定領域新增新功能
Manager API 提供對所有應用程式功能的有組織存取:
// 事件與自訂事件處理app.Event.Emit("custom", data)app.Event.On("custom", func(e *CustomEvent) { ... })
// 視窗管理window, _ := app.Window.GetByName("main")app.Window.OnCreate(func(window Window) { ... })
// 瀏覽器整合app.Browser.OpenURL("https://wails.io")
// 選單管理menu := app.Menu.New()app.Menu.Set(menu)
// 系統匣systray := app.SystemTray.New()管理視窗建立、擷取與生命週期回調。
// 建立視窗window := app.Window.New()window := app.Window.NewWithOptions(options)current := app.Window.Current()
// 尋找視窗window, exists := app.Window.GetByName("main")windows := app.Window.GetAll()
// 視窗回調app.Window.OnCreate(func(window Window) { // 處理視窗建立})處理自訂事件與應用程式事件監聽。
// 自訂事件app.Event.Emit("userAction", data)cancelFunc := app.Event.On("userAction", func(e *CustomEvent) { // 處理事件})app.Event.Off("userAction")app.Event.Reset() // 移除所有監聽器
// 應用程式事件app.Event.OnApplicationEvent(events.Common.ThemeChanged, func(e *ApplicationEvent) { // 處理系統主題變更})瀏覽器管理器
Section titled “瀏覽器管理器”提供開啟 URL 和檔案的瀏覽器整合。
// 在預設瀏覽器中開啟 URL 和檔案err := app.Browser.OpenURL("https://wails.io")err := app.Browser.OpenFile("/path/to/document.pdf")存取系統環境資訊。
// 取得環境資訊env := app.Env.Info()fmt.Printf("OS: %s, Arch: %s\n", env.OS, env.Arch)
// 檢查系統主題if app.Env.IsDarkMode() { // 深色模式已啟用}
// 開啟檔案管理器err := app.Env.OpenFileManager("/path/to/folder", false)對話框管理器
Section titled “對話框管理器”有組織地存取檔案與訊息對話框。
// 檔案對話框result, err := app.Dialog.OpenFile(). AddFilter("Text Files", "*.txt"). PromptForSingleSelection()
result, err = app.Dialog.SaveFile(). SetDefaultFilename("document.txt"). PromptForSingleSelection()
// 訊息對話框app.Dialog.Info(). SetTitle("Information"). SetMessage("Operation completed successfully"). Show()
app.Dialog.Error(). SetTitle("Error"). SetMessage("An error occurred"). Show()應用程式選單的建立與管理。
// 建立並設定應用程式選單menu := app.Menu.New()fileMenu := menu.AddSubmenu("File")fileMenu.Add("New").OnClick(func(ctx *Context) { // 處理選單點擊})
app.Menu.Set(menu)
// 顯示關於對話框app.Menu.ShowAbout()快捷鍵管理器
Section titled “快捷鍵管理器”全域快捷鍵的動態管理。
// 新增快捷鍵app.KeyBinding.Add("ctrl+n", func(window *WebviewWindow) { // 處理 Ctrl+N})
app.KeyBinding.Add("ctrl+q", func(window *WebviewWindow) { app.Quit()})
// 移除快捷鍵app.KeyBinding.Remove("ctrl+n")
// 取得所有快捷鍵bindings := app.KeyBinding.GetAll()右鍵選單管理器
Section titled “右鍵選單管理器”進階右鍵選單管理(適用於函式庫作者)。
// 建立並註冊右鍵選單menu := app.ContextMenu.New()app.ContextMenu.Add("myMenu", menu)
// 擷取右鍵選單menu, exists := app.ContextMenu.Get("myMenu")
// 移除右鍵選單app.ContextMenu.Remove("myMenu")多監視器設定的螢幕管理與座標轉換。
// 取得螢幕資訊screens := app.Screen.GetAll()primary := app.Screen.GetPrimary()
// 座標轉換physicalPoint := app.Screen.DipToPhysicalPoint(logicalPoint)logicalPoint := app.Screen.PhysicalToDipPoint(physicalPoint)
// 螢幕偵測screen := app.Screen.ScreenNearestDipPoint(point)screen = app.Screen.ScreenNearestDipRect(rect)剪貼簿管理器
Section titled “剪貼簿管理器”用於讀取和寫入文字的剪貼簿操作。
// 設定文字到剪貼簿success := app.Clipboard.SetText("Hello World")if !success { // 處理錯誤}
// 從剪貼簿取得文字text, ok := app.Clipboard.Text()if !ok { // 處理錯誤} else { // 使用文字}系統匣管理器
Section titled “系統匣管理器”系統匣圖示的建立與管理。
// 建立系統匣systray := app.SystemTray.New()systray.SetLabel("My App")systray.SetIcon(iconBytes)
// 新增選單到系統匣menu := app.Menu.New()menu.Add("Open").OnClick(func(ctx *Context) { // 處理點擊})systray.SetMenu(menu)
// 完成時銷毀系統匣systray.Destroy()