5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-19 02:19:31 +08:00
wails/mkdocs-website/docs/cy/whats-new.md
2024-03-18 21:52:39 +11:00

9.6 KiB

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.

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
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.

Cynhyrchir cysylltiadau trwy redeg wails3 generate bindings yn unig yn ystod cyfeiriadur y prosiect.

// @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 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!

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.

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.

<!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 cyfeiriadur. Edrychwch arnynt!