mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-20 02:49:30 +08:00
317 lines
9.6 KiB
Markdown
317 lines
9.6 KiB
Markdown
# 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<string>}
|
|
**/
|
|
Greet: function (name) {
|
|
wails.CallByID(1411160069, ...Array.prototype.slice.call(arguments, 0));
|
|
},
|
|
|
|
/**
|
|
* GreetService.GreetPerson
|
|
* GreetPerson greets a person
|
|
* @param person {main.Person}
|
|
* @returns {Promise<string>}
|
|
**/
|
|
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
|
|
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>Wails ML Demo</title>
|
|
</head>
|
|
<body style="margin-top:50px; color: white; background-color: #191919">
|
|
<h2>Wails ML Demo</h2>
|
|
<p>Mae'r cymhwysiad hwn yn cynnwys dim JavaScript!</p>
|
|
<button wml-event="button-pressed">Pwyswch fi!</button>
|
|
<button wml-event="delete-things" wml-confirm="Ydych chi'n siŵr?">
|
|
Dileu'r holl bethau!
|
|
</button>
|
|
<button wml-window="Close" wml-confirm="Ydych chi'n siŵr?">
|
|
Cau'r Ffenestr?
|
|
</button>
|
|
<button wml-window="Center">Canoli</button>
|
|
<button wml-window="Minimise">Lleihauo</button>
|
|
<button wml-window="Maximise">Mwyhau</button>
|
|
<button wml-window="UnMaximise">Dad-fwyhauo</button>
|
|
<button wml-window="Fullscreen">Sgrin lawn</button>
|
|
<button wml-window="UnFullscreen">Dad-sgrin lawn</button>
|
|
<button wml-window="Restore">Adfer</button>
|
|
<div
|
|
style="width: 200px; height: 200px; border: 2px solid white;"
|
|
wml-event="hover"
|
|
wml-trigger="mouseover"
|
|
>
|
|
Fy/Goresgyn fi
|
|
</div>
|
|
</body>
|
|
</html>
|
|
```
|
|
## Enghreifftiau
|
|
|
|
Mae mwy o enghreifftiau ar gael yn y [examples](https://github.com/wailsapp/wails/tree/v3-alpha/v3/examples) cyfeiriadur. Edrychwch arnynt! |