我在使用Fyne向按钮回调传递动态参数时遇到问题。我正在尝试创建一个按钮列表,当单击该列表时,它将调用一个具有特定字符串参数的函数:
clients := []fyne.CanvasObject{}
for _, uuidStr := range uuidStrs {
clientBtn := widget.NewButton(uuidStr, func() { server.selectClient(uuidStr))
clients = append(clients, clientBtn)
}
clientsListed := container.New(layout.NewGridLayout(1), clients...)
问题是,单击所有按钮时,都将选择最后一个客户端,例如,它将调用server.selectClient(uuidStr)
,其中uuidStr始终为uuidStrs[len(uuidStrs)-1]
,但我希望每个按钮都传递一个唯一的uuidStr。所有按钮都显示正确的字符串,但不要在回调中传递正确的字符串。
单击时,我如何获得按钮来选择它显示的客户端?
这是由于Go如何在循环迭代中重新使用变量。你需要";捕获";值,以便按钮回调函数c获得正确的值。如下:
clients := []fyne.CanvasObject{}
for _, uuidStr := range uuidStrs {
uuid := uuidStr
clientBtn := widget.NewButton(uuidStr, func() { server.selectClient(uuid))
clients = append(clients, clientBtn)
}
clientsListed := container.New(layout.NewGridLayout(1), clients...)