Tutorial 12

Write some static content.

Example

// Copyright (c) 2025 worldiety GmbH
//
// This file is part of the NAGO Low-Code Platform.
// Licensed under the terms specified in the LICENSE file.
//
// SPDX-License-Identifier: Custom-License

package main

import (
	"fmt"
	"strings"
	"time"

	"go.wdy.de/nago/application"
	"go.wdy.de/nago/presentation/core"
	heroOutline "go.wdy.de/nago/presentation/icons/hero/outline"
	. "go.wdy.de/nago/presentation/ui"
	"go.wdy.de/nago/presentation/ui/alert"
	"go.wdy.de/nago/web/vuejs"
)

func main() {
	application.Configure(func(cfg *application.Configurator) {
		cfg.SetApplicationID("de.worldiety.tutorial")
		cfg.Serve(vuejs.Dist())

		cfg.RootView(".", func(wnd core.Window) core.View {
			firstname := core.AutoState[string](wnd)
			basicInput := core.AutoState[string](wnd)
			secret := core.AutoState[string](wnd)
			showAlert := core.AutoState[bool](wnd)
			myIntState := core.AutoState[int64](wnd)
			myFloatState := core.AutoState[float64](wnd)

			// add artificial latency
			time.Sleep(time.Millisecond * 500)

			return VStack(
				VStack(
					alert.Dialog("Achtung", Text(fmt.Sprintf("Deine Eingabe: %v\nsecret: %v\n int-field: %v\n float-field: %v", firstname, secret, myIntState, myFloatState)), showAlert, alert.Ok()),

					// ================================================================ //

					TextField("hello world", firstname.Get()).
						InputValue(firstname).
						Leading(ImageIcon(heroOutline.UserCircle)).
						Trailing(ImageIcon(heroOutline.UserCircle)).
						FullWidth(),

					TextField("hello world", firstname.Get()).
						InputValue(firstname).
						Leading(ImageIcon(heroOutline.UserCircle)).
						Trailing(ImageIcon(heroOutline.UserCircle)).
						ErrorText("this is an error").
						FullWidth(),

					TextField("hello world", firstname.Get()).
						InputValue(firstname).
						Leading(ImageIcon(heroOutline.UserCircle)).
						Trailing(ImageIcon(heroOutline.UserCircle)).
						Disabled(true).
						FullWidth(),

					// ================================================================ //

					// you can re-use the state, but be careful of the effects
					TextField("just numbers", numsOf(firstname.Get())).
						InputValue(firstname).
						KeyboardType(KeyboardInteger).
						Style(TextFieldReduced).
						FullWidth(),

					TextField("just numbers", numsOf(firstname.Get())).
						InputValue(firstname).
						KeyboardType(KeyboardInteger).
						Style(TextFieldReduced).
						ErrorText("this is an error").
						FullWidth(),

					TextField("just numbers", numsOf(firstname.Get())).
						InputValue(firstname).
						KeyboardType(KeyboardInteger).
						Style(TextFieldReduced).
						Disabled(true).
						FullWidth(),

					// ================================================================ //

					TextField("basic text field", basicInput.Get()).
						InputValue(basicInput).
						Style(TextFieldBasic).
						FullWidth(),

					TextField("basic text field", basicInput.Get()).
						InputValue(basicInput).
						Style(TextFieldBasic).
						ErrorText("this is an error").
						FullWidth(),

					TextField("basic text field", basicInput.Get()).
						InputValue(basicInput).
						Style(TextFieldBasic).
						Disabled(true).
						FullWidth(),

					// ================================================================ //

					// learn task: take your time to understand what
					// the difference between value and input value is
					IntField("int-field", 42, myIntState).FullWidth(),
					FloatField("float-field", 42.5, myFloatState).FullWidth(),

					TextField("text area", "hello\nworld").Lines(3).FullWidth(),
					TextField("text area", "hello\nworld").Lines(3).Disabled(true).FullWidth(),
					TextField("text area", "hello\nworld").Lines(3).ErrorText("this is an error").FullWidth(),
					PrimaryButton(func() {
						showAlert.Set(true)
					}).Title("Check"),

					PasswordField("your secret", secret.Get()).InputValue(secret).FullWidth(),
				).
					Gap(L16).
					Padding(Padding{}.Vertical(L32)).
					Frame(Frame{MaxWidth: L880}),
			).
				Frame(Frame{}.MatchScreen())
		})
	}).Run()
}

func numsOf(s string) string {
	var sb strings.Builder
	for _, r := range s {
		if r >= '0' && r <= '9' {
			sb.WriteRune(r)
		}
	}

	return sb.String()
}

Info

More static content.

Image