跳转至

01 · 快速开始

本页带你在 5 分钟内跑起第一个 FlowUI 窗口。

环境要求

  • Go 1.26.2 或更高
  • 桌面系统(Windows / macOS / Linux,Gio 支持的平台)

安装

在你的模块里:

go get github.com/qianniancn/flowui/ui

应用 import 公开包:

import "github.com/qianniancn/flowui/ui"

不要 import github.com/qianniancn/flowui/internal/...

第一个应用

创建 main.go

package main

import (
    "fmt"

    "github.com/qianniancn/flowui/ui"
)

type Model struct {
    Count int
}

type Msg interface{ msg() }

type Inc struct{}
type Dec struct{}

func (Inc) msg() {}
func (Dec) msg() {}

func Update(m *Model, msg Msg) ui.Cmd[Msg] {
    switch msg.(type) {
    case Inc:
        m.Count++
    case Dec:
        m.Count--
    }
    return nil
}

func View(_ *ui.Context, m Model, send ui.Send[Msg]) ui.Widget {
    return ui.Center(
        ui.Box(
            ui.Column(
                ui.Text("FlowUI Counter").Size(24),
                ui.Text(fmt.Sprintf("count: %d", m.Count)).Size(18),
                ui.Row(
                    ui.Button("inc", ui.Text("+1")).OnClick(func() {
                        send(Inc{})
                    }),
                    ui.Button("dec", ui.Text("-1")).
                        Variant(ui.ButtonSecondary).
                        OnClick(func() {
                            send(Dec{})
                        }),
                ).Gap(12),
            ).Gap(12),
        ).Style(ui.Padding(24)),
    )
}

func main() {
    ui.Run(ui.NewProgram(Model{}, Update, View),
        ui.Title("FlowUI Counter"),
        ui.Size(640, 480),
    )
}

运行:

go run .

发生了什么

  1. Model:业务数据(这里是 Count)。
  2. Msg:用户意图(Inc / Dec)。
  3. Update:唯一修改 Model 的地方。
  4. View:只读 Model,返回控件树;按钮通过 send 投递消息。
  5. ui.Run:打开窗口并跑 MVU 循环。

两种应用层级

API 何时用
ui.Run(ui.Program) 所有单窗口应用(本页)
ui.Application 多窗口、托盘和应用生命周期

详见 03-MVU与消息08-命令与订阅11-多窗口

仓库示例

# 计数器
go run ./examples/counter

# 表单
go run ./examples/form

# 异步 Cmd
go run ./examples/async

下一步