Aller au contenu

Une première application

Partir d'app-template, déjà conforme à MVVM et au vert, ou ouvrir une simple fenêtre et y ajouter des widgets.

Depuis le modèle

go-widgets/app-template est un dépôt modèle : une petite mais vraie application de navigateur, avec un champ de recherche, un filtre par catégorie, la liste des lignes qui correspondent et une ligne d’état. Tout ce dont une application plus grande a besoin est déjà branché : un view-model qui ne contient aucun widget, une vue liée à celui-ci, un hôte wasm, une barrière de couverture à 100 %, et la barrière MVVM.

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

Servez dist/ en HTTP : une page ouverte depuis file:// ne peut pas instancier de wasm.

FichierCe qu’il contient
viewmodel.gotout l’état, sous forme d’observables et de commandes mvvm. Aucun widget. Testable sans canvas.
scene.goles widgets, chacun lié au view-model par mvvmtk. Il n’affecte jamais lui-même un champ d’état d’un widget.
main.gole seul fichier avec une étiquette de compilation (js && wasm) : il transmet les entrées à la boîte à outils et copie l’image dans un <canvas>.

Modifiez les deux premiers et faites passer l’état par les binders : la tâche mvvm de la CI fait échouer une pull request qui affecte directement un champ d’un widget.

Depuis une simple fenêtre

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
}

Une largeur et une hauteur laissées à zéro demandent au back-end une taille lisible par défaut ; sous macOS, c’est une fraction de l’écran principal. CGO_ENABLED=0 go build produit le binaire pour chaque plateforme, depuis n’importe quelle machine.

Quel module pour quoi

Vous voulezCommencez par
une fenêtre de bureauwindow
une application de bureau avec une icône de zone de notification et l’apparence du systèmeapplication
une page dans un navigateurwebcanvas, ou le modèle ci-dessus
un programme en terminaltui
une application Androidandroid
une image d’un widget pour un READMEsvg

Pour voir le jeu de widgets avant d’écrire quoi que ce soit, ouvrez la galerie : chaque famille de widgets, en direct, dans un canvas de navigateur.

Créée le par tannevaled

Modifiée le par tannevaled