Une première application
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.htmlServez dist/ en HTTP : une page ouverte depuis file:// ne peut pas instancier de wasm.
| Fichier | Ce qu’il contient |
|---|---|
viewmodel.go | tout l’état, sous forme d’observables et de commandes mvvm. Aucun widget. Testable sans canvas. |
scene.go | les widgets, chacun lié au view-model par mvvmtk. Il n’affecte jamais lui-même un champ d’état d’un widget. |
main.go | le 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 voulez | Commencez par |
|---|---|
| une fenêtre de bureau | window |
| une application de bureau avec une icône de zone de notification et l’apparence du système | application |
| une page dans un navigateur | webcanvas, ou le modèle ci-dessus |
| un programme en terminal | tui |
| une application Android | android |
| une image d’un widget pour un README | svg |
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