Dynamically update fyne tree widget

1.8k Views Asked by At

need help to update a Tree widget at runtime, as suggested here fyne issue seems that using Refresh() function on the widget it will sync the data changes stored in the list map, here is the code:

package main

//______________________________________________________________________________

import (
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/layout"
    "fyne.io/fyne/v2/widget"

    dbg "github.com/fatih/color"
)

//______________________________________________________________________________

var content *fyne.Container
var tree *widget.Tree
var list map[string][]string

//______________________________________________________________________________

func main() {
    myApp := app.New()
    myWindow := myApp.NewWindow("List")
    makeTree()
    top := widget.NewLabel("Items' list::")
    bottom := widget.NewButton("Update list", updateList)
    content = container.New(layout.NewBorderLayout(top, bottom, nil, nil),
        top,
        tree,
        bottom,
    )

    myWindow.SetContent(content)
    myWindow.Resize(fyne.NewSize(480, 600))
    myWindow.ShowAndRun()
}

//______________________________________________________________________________

func makeTree() {
    list = map[string][]string{
        "":  {"A"},
        "A": {"B", "D"},
        "B": {"C"},
        "C": {"abc"},
        "D": {"E"},
        "E": {"F", "G"},
    }

    tree = widget.NewTreeWithStrings(list)
    tree.OnSelected = func(id string) {
        dbg.Green("Tree node selected: %s", id)
    }
    tree.OnUnselected = func(id string) {
        dbg.Green("Tree node unselected: %s", id)
    }

    tree.OpenAllBranches()
}

//______________________________________________________________________________

func updateList() {
    dbg.Green("UpdateList")

    list = map[string][]string{
        "":  {"A"},
        "A": {"B"},
        "B": {"C"},
    }

    tree.Refresh()
}

Thanks

1

There are 1 best solutions below

1
On BEST ANSWER

The NewTreeWithStrings is a static helper function, so does not really update the way you want. If you can use NewTree then you can point to your data structure and it will auto update.