默认模板由main.go(配置和运行)和app.go(应用逻辑)两个文件构成
app.go
type App struct {
ctx context.Context
}
func NewApp() *App {
return &App{}
}
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
}
func (a *App) shutdown(ctx context.Context) {
}
main.go
//go:embed frontend/dist
var assets embed.FS
func main() {
app := NewApp()
err := wails.Run(&options.App{
Title: "My App",
Width: 800,
Height: 600,
Assets: &assets,
OnStartup: app.startup,
OnShutdown: app.shutdown,
})
if err != nil {
log.Fatal(err)
}
}
绑定方法
app.go
type App struct {
ctx context.Context
}
func NewApp() *App {
return &App{}
}
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
}
func (a *App) shutdown(ctx context.Context) {
}
func (a *App) Greet(name string) string {
return fmt.Printf("Hello %s!", name)
}
在主程序main.go中告诉wails想要绑定什么
func main() {
app := NewApp()
err := wails.Run(&options.App{
Title: "My App",
Width: 800,
Height: 600,
OnStartup: app.startup,
OnShutdown: app.shutdown,
Bind: []interface{}{
app,
},
})
if err != nil {
log.Fatal(err)
}
}
在前端的main.js中
let nameElement = document.getElementById("name");
window.greet = function () {
let name = nameElement.value;
// 调用Go中的函数:App.Greet(name)
window.go.main.App.Greet(name).then((result) => {
document.getElementById("result").innerText = result;
});
};
nameElement.onkeydown = function (e) {
if (e.code === "Enter") {
window.greet();
}
};
窗口
窗口标题、窗口全屏、窗口居中、窗口重新加载、显示窗口、隐藏窗口、设置窗口尺寸、获取窗口尺寸、设置窗口最小尺寸、设置窗口最大尺寸、设置/获取窗口位置、窗口最大化、窗口最大化切换、窗口最小化、窗口设置 RGBA
对话框
打开目录对话框、打开文件对话框、打开多个文件对话框、保存文件对话框、消息对话框
接下来看看事件是如何交互的。有中文文档,却完全没有一个示例……