2022-05-19

how to loop over fyne.CanvasObject in fyne in golang

the question is. i have NewVScroll in the NewVScroll i have NewVBoxLayout in NewVBoxLayout i have NewButton . the problem is when i press the NewButton it should loop over NewVScroll and then loop over NewVBoxLayout to find NewButton . but i don't know how to do it in fyne because i can't loop over var v1 fyne.CanvasObject

the error is : cannot range over v1 (variable of type fyne.CanvasObject)

this is the code

package main

import (
    "fmt"

    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/layout"
    "fyne.io/fyne/v2/widget"
)

var cEntries *fyne.Container

func FindObject(object fyne.CanvasObject, objects []fyne.CanvasObject) (int, bool) {
    for k1, v1 := range objects {
        for _, v2 := range v1 {// the problem is here. i can't loop over fyne.CanvasObject
            if v2 == object {
                return k1, true
            }
        }
    }
    return 0, false
}

func w1() *fyne.Container {
    wb := widget.NewButton("", nil)

    wb.OnTapped = func() {
        index, isin := FindObject(wb, cEntries.Objects)
        fmt.Println(index, isin)
    }

    return container.New(layout.NewVBoxLayout(), wb)
}

func main() {
    a := app.New()
    w := a.NewWindow("")

    wbAdd := widget.NewButton("+", nil)
    cEntries = container.New(layout.NewVBoxLayout(), wbAdd, w1())

    wbAdd.OnTapped = func() {
        cEntries.Add(w1())
    }

    wsEntries := container.NewVScroll(cEntries)

    w.SetContent(wsEntries)
    w.ShowAndRun()
}


No comments:

Post a Comment