Zum Inhalt springen

Eine erste Anwendung

Mit app-template beginnen, das bereits MVVM-konform und grün ist, oder ein nacktes Fenster öffnen und Widgets hinzufügen.

Aus dem Template

go-widgets/app-template ist ein Template-Repository: eine kleine, aber echte Browser-Anwendung mit einem Suchfeld, einem Kategoriefilter, einer Liste der passenden Zeilen und einer Statuszeile. Alles, was eine größere Anwendung braucht, ist bereits verdrahtet: ein View-Model ohne Widget darin, eine daran gebundene View, ein wasm-Host, eine 100-%-Coverage-Schranke und die MVVM-Schranke.

git clone https://github.com/go-widgets/app-template my-app
cd my-app
go mod edit -module github.com/you/my-app
./build.sh          # dist/app.wasm, dist/wasm_exec.js, dist/index.html

Stellen Sie dist/ über HTTP bereit: Eine über file:// geöffnete Seite kann kein wasm instanziieren.

DateiWas sie enthält
viewmodel.gojedes Stück Zustand, als mvvm-Observables und -Commands. Kein Widget. Ohne Canvas testbar.
scene.godie Widgets, jedes über mvvmtk an das View-Model gebunden. Es weist nie selbst ein Zustandsfeld eines Widgets zu.
main.godie einzige Datei mit einem Build-Tag (js && wasm): leitet Eingaben an das Toolkit weiter und überträgt den Frame per Blit in ein <canvas>.

Bearbeiten Sie die ersten beiden und lassen Sie den Zustand weiter durch die Binder fließen: Der mvvm-Job in der CI lässt einen Pull Request scheitern, der ein Feld eines Widgets direkt zuweist.

Aus einem nackten Fenster

package main

import (
	"github.com/go-widgets/toolkit"
	"github.com/go-widgets/window"
)

func main() {
	w, err := window.Open(window.Config{Title: "Demo"})
	if err == window.ErrUnsupported {
		return // no native back-end on this platform
	}
	if err != nil {
		panic(err)
	}
	defer w.Close()

	box := toolkit.NewVBox()
	box.Append(toolkit.NewLabel("Hello"))
	box.Append(toolkit.NewButton("Click me", func() {}))
	w.Run(box) // layout, draw, present, dispatch input, until closed
}

Breite und Höhe auf null belassen bittet das Back-End um einen lesbaren Standardwert; unter macOS ist das ein Bruchteil des Hauptbildschirms. CGO_ENABLED=0 go build erzeugt das Binary für jede Plattform, von jeder Maschine aus.

Welches Modul wofür

Sie wollenBeginnen Sie mit
ein Desktop-Fensterwindow
eine Desktop-Anwendung mit Tray-Symbol und dem Erscheinungsbild des Systemsapplication
eine Seite im Browserwebcanvas oder das Template oben
ein Terminalprogrammtui
eine Android-Appandroid
ein Bild eines Widgets für ein READMEsvg

Um den Widget-Satz zu sehen, bevor Sie etwas schreiben, öffnen Sie die Galerie: jede Widget-Familie, live, in einem Browser-Canvas.

Erstellt am von tannevaled

Geändert am von tannevaled