# Beth sydd newydd yn Wails v3 Alpha Mae Wails v3 Alpha yn symud o'r API sengl-ffenestr, datganiadol o v2 i un proseduraidd. Mae'r API hwn cynnil yn gwneud datblygiad cod yn haws, yn gwella darllenadwyedd, ac yn datgloi apiau amlder-ffenestr cymhleth. Nid yw Wails v3 Alpha yn wella ar fersiwnau blaenorol yn unig - mae'n ailddychmygu galluoedd datblygu rhaglenni peiriannu gweledol gyda Go a thechnolegau gwe modern. ## Amlder Ffenestri Mae'n awr yn bosibl creu amlder ffenestri a ffurfweddu pob un ohonynt yn annibynnol. ```go package main import ( _ "embed" "log" "github.com/wailsapp/wails/v3/pkg/application" ) //go:embed assets/* var assets embed.FS func main() { app := application.New(application.Options{ Name: "Multi Window Demo", Assets: application.AssetOptions{ Handler: application.AssetFileServerFS(assets), }, }) window1 := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ Title: "Ffenest 1", }) window2 := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ Title: "Ffenest 2", }) // llwytho'r html wedi'i ymgorffori o'r embed.FS window1.SetURL("/") window1.Center() // Llwytho URL allanol window2.SetURL("https://wails.app") err := app.Run() if err != nil { log.Fatal(err.Error()) } } ``` ## Systriedi Mae systriedi yn caniatáu i chi ychwanegu eicon yn ardal y system dociau eich peiriant a chael y nodweddion canlynol: - Atodwch ffenestr (bydd y ffenestr yn cael ei chanoli i'r eicon systrai) - Cefnogaeth lawn ar gyfer dewislen - Eicon modd golau/tywyll ```go package main import ( _ "embed" "log" "runtime" "github.com/wailsapp/wails/v3/pkg/application" "github.com/wailsapp/wails/v3/pkg/icons" ) func main() { app := application.New(application.Options{ Name: "Systray Demo", Mac: application.MacOptions{ ActivationPolicy: application.ActivationPolicyAccessory, }, }) window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ Width: 500, Height: 800, Frameless: true, AlwaysOnTop: true, Hidden: true, Windows: application.WindowsWindow{ HiddenOnTaskbar: true, }, }) systemTray := app.NewSystemTray() // Cefnogaeth ar gyfer eicon thema ar macOS if runtime.GOOS == "darwin" { systemTray.SetTemplateIcon(icons.SystrayMacTemplate) } else { // Cefnogaeth ar gyfer eicon modd golau/tywyll systemTray.SetDarkModeIcon(icons.SystrayDark) systemTray.SetIcon(icons.SystrayLight) } // Cefnogaeth ar gyfer dewislen myMenu := app.NewMenu() myMenu.Add("Hello World!").OnClick(func(_ *application.Context) { println("Hello World!") }) systemTray.SetMenu(myMenu) // Bydd hyn yn canoli'r ffenestr i'r eicon systrai gyda 5px o leoliad // Bydd yn cael ei ddangos yn awtomatig pan fo'r eicon systrai wedi'i glicio // a'i guddio pan fo'r ffenestr yn colli ffocws systemTray.AttachWindow(window).WindowOffset(5) err := app.Run() if err != nil { log.Fatal(err) } } ``` ## Atchwanegion Mae Atchwanegion yn caniatáu i chi ehangu swyddogaeth y system Wails. Nid yn unig y gellir defnyddio dulliau atchwanegion yn Go, ond hefyd galw ohonynt o JavaScript. Atchwanegion a gynhwysir: - kvstore - Storfa allwedd/gwerth - browser - agor cysylltiadau mewn porwr - log - logydd arferiadol - oauth - trafod dilysu oauth a chefnogi 60 o ddarparwyr - single_instance - dim ond caniatáu un copi o'ch ap i redeg - sqlite - ychwanegu cronfa ddata sqlite at eich ap. Yn defnyddio'r llyfrgell fullPureGo fodern - start_at_login - Cofrestru/Dad-gofrestru eich cais i gychwyn wrth fewngofnodi ## Genedigaeth cysylltiadau gwelledig Mae v3 yn defnyddio dadansoddwr statif newydd i gynhyrchu cysylltiadau. Mae hyn yn ei gwneud yn eithriadol o gyflym ac yn cynnal sylwadau a enwau paramedrau yn eich cysylltiadau. Yn ddiofyn, cynhyrchir cysylltiadau gyda galwadau gan ddefnyddio ID yn hytrach na throednodiadau. Mae hyn yn darparu hwb perfformiad ac yn caniatáu i chi ddefnyddio offer cuddio fel [garble](https://github.com/burrowers/garble). Cynhyrchir cysylltiadau trwy redeg `wails3 generate bindings` yn unig yn ystod cyfeiriadur y prosiect. ```js // @ts-check // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT import { main } from "./models"; window.go = window.go || {}; window.go.main = { GreetService: { /** * GreetService.Greet * Greet greets a person * @param name {string} * @returns {Promise} **/ Greet: function (name) { wails.CallByID(1411160069, ...Array.prototype.slice.call(arguments, 0)); }, /** * GreetService.GreetPerson * GreetPerson greets a person * @param person {main.Person} * @returns {Promise} **/ GreetPerson: function (person) { wails.CallByID(4021313248, ...Array.prototype.slice.call(arguments, 0)); }, }, }; ``` ## System adeiladu gwelledig Yn v2, roedd y system adeiladu yn gwbl anhyglyw a chaled i'w addasu. Yn v3, mae'n bosibl adeiladu popeth gan ddefnyddio offer Go safonol. Mae'r holl waith trwm a wnaeth system adeiladu v2, fel cynhyrchu eicon, wedi'i ychwanegu fel gorchmynion offeryn yn y CLI. Rydyn ni wedi ymgorffori [Taskfile](https://taskfile.dev) yn y CLI i drefnu'r galwadau hyn i ddod â'r un profiad datblygwr â v2. Fodd bynnag, mae'r dull hwn yn dod â'r cydbwysedd perffaith o hyblygrwydd a hwylusder defnydd gan y gallwch nawr addasu'r broses adeiladu i'ch anghenion. Gallwch hyd yn oed ddefnyddio gwneud os mai dyna eich dewis! ```yaml title="Snippet from Taskfile.yml" build:darwin: summary: Builds the application platforms: - darwin cmds: - task: pre-build - task: build-frontend - go build -gcflags=all="-N -l" -o bin/{{.APP_NAME}} - task: post-build env: CGO_CFLAGS: "-mmacosx-version-min=10.13" CGO_LDFLAGS: "-mmacosx-version-min=10.13" MACOSX_DEPLOYMENT_TARGET: "10.13" ``` ## Digwyddiadau gwelledig Caiff digwyddiadau eu hamlygu nawr ar gyfer llawer o'r gweithrediadau amser gweithredu, gan eich galluogi i glymu i mewn i ddigwyddiadau cymhwysiad/system. Caiff digwyddiadau trawsblat (cyffredin) hefyd eu hamlygu lle ceir digwyddiadau platfform cyffredin, gan eich galluogi i ysgrifennu'r un dulliau trin digwyddiadau ar draws platfformau. Gellir hefyd gofrestru bachau digwyddiad. Mae'r rhain fel y dull `On` ond yn synchronaidd ac yn caniatáu i chi ddiddymu'r digwyddiad. Enghraifft o hyn fyddai dangos cadarnhad cyn cau ffenestr. ```go package main import ( _ "embed" "log" "time" "github.com/wailsapp/wails/v3/pkg/application" "github.com/wailsapp/wails/v3/pkg/events" ) //go:embed assets var assets embed.FS func main() { app := application.New(application.Options{ Name: "Events Demo", Description: "A demo of the Events API", Assets: application.AssetOptions{ Handler: application.AssetFileServerFS(assets), }, Mac: application.MacOptions{ ApplicationShouldTerminateAfterLastWindowClosed: true, }, }) // Trin digwyddiadau cwstom app.Events.On("myevent", func(e *application.WailsEvent) { log.Printf("[Go] WailsEvent received: %+v\n", e) }) // Digwyddiadau cymhwysiad penodol i'r system weithredu app.On(events.Mac.ApplicationDidFinishLaunching, func(event *application.Event) { println("events.Mac.ApplicationDidFinishLaunching fired!") }) // Digwyddiadau agnostig i'r platfform app.On(events.Common.ApplicationStarted, func(event *application.Event) { println("events.Common.ApplicationStarted fired!") }) win1 := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ Title: "Takes 3 attempts to close me!", }) var countdown = 3 // Cofrestru bachyn i ddiddymu'r ffenestr yn cau win1.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) { countdown-- if countdown == 0 { println("Closing!") return } println("Nope! Not closing!") e.Cancel() }) win1.On(events.Common.WindowFocus, func(e *application.WindowEvent) { println("[Event] Window focus!") }) err := app.Run() if err != nil { log.Fatal(err.Error()) } } ``` ## Iaith Marcio Wails (wml) Nodwedd arbrofol i alw dulliau amser gweithredu gan ddefnyddio html plaen, yn debyg i [htmx](https://htmx.org). ```html Wails ML Demo

Wails ML Demo

Mae'r cymhwysiad hwn yn cynnwys dim JavaScript!

Fy/Goresgyn fi
``` ## Enghreifftiau Mae mwy o enghreifftiau ar gael yn y [examples](https://github.com/wailsapp/wails/tree/v3-alpha/v3/examples) cyfeiriadur. Edrychwch arnynt!