Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NewListWithData too many iterations #4718

Open
2 tasks done
BillBuilt opened this issue Mar 13, 2024 · 0 comments
Open
2 tasks done

NewListWithData too many iterations #4718

BillBuilt opened this issue Mar 13, 2024 · 0 comments
Labels
unverified A bug that has been reported but not verified

Comments

@BillBuilt
Copy link

Checklist

  • I have searched the issue tracker for open issues that relate to the same problem, before opening a new one.
  • This issue only relates to a single bug. I will open new issues for any other problems.

Describe the bug

Using NewListWithData, when the list is created, it seems to be looping many more time than necessary. Running the example code with 3 items in a list, I would expect to only have the update item callback fired 3 times, but when examining the log output, it seems to be getting called as much as 13-15 times and in no predictable order.

13 iterations

2024/03/13 08:04:19 INFO list update name="User 1"
2024/03/13 08:04:19 INFO list update name="User 1"
2024/03/13 08:04:19 INFO list update name="User 2"
2024/03/13 08:04:19 INFO list update name="User 3"
2024/03/13 08:04:19 INFO list update name="User 1"
2024/03/13 08:04:19 INFO list update name="User 2"
2024/03/13 08:04:19 INFO list update name="User 3"
2024/03/13 08:04:19 INFO list update name="User 1"
2024/03/13 08:04:19 INFO list update name="User 2"
2024/03/13 08:04:19 INFO list update name="User 3"
2024/03/13 08:04:19 INFO list update name="User 1"
2024/03/13 08:04:19 INFO list update name="User 2"
2024/03/13 08:04:19 INFO list update name="User 3"

14 iterations

2024/03/13 08:07:18 INFO list update name="User 1"
2024/03/13 08:07:18 INFO list update name="User 1"
2024/03/13 08:07:18 INFO list update name="User 1"
2024/03/13 08:07:18 INFO list update name="User 2"
2024/03/13 08:07:18 INFO list update name="User 3"
2024/03/13 08:07:18 INFO list update name="User 1"
2024/03/13 08:07:18 INFO list update name="User 2"
2024/03/13 08:07:18 INFO list update name="User 3"
2024/03/13 08:07:18 INFO list update name="User 1"
2024/03/13 08:07:18 INFO list update name="User 2"
2024/03/13 08:07:18 INFO list update name="User 3"
2024/03/13 08:07:18 INFO list update name="User 1"
2024/03/13 08:07:18 INFO list update name="User 2"
2024/03/13 08:07:18 INFO list update name="User 3"

15 iterations

2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 2"
2024/03/13 08:08:17 INFO list update name="User 3"
2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 2"
2024/03/13 08:08:17 INFO list update name="User 3"
2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 2"
2024/03/13 08:08:17 INFO list update name="User 3"
2024/03/13 08:08:17 INFO list update name="User 1"
2024/03/13 08:08:17 INFO list update name="User 2"
2024/03/13 08:08:17 INFO list update name="User 3"

13 iterations

2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 2"
2024/03/13 08:08:48 INFO list update name="User 3"
2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 2"
2024/03/13 08:08:48 INFO list update name="User 3"
2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 2"
2024/03/13 08:08:48 INFO list update name="User 3"
2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 2"

I would expect to only see this each time

2024/03/13 08:08:48 INFO list update name="User 1"
2024/03/13 08:08:48 INFO list update name="User 2"
2024/03/13 08:08:48 INFO list update name="User 3"

How to reproduce

  1. run the example
  2. inspect log output
  3. run more times and compare

Screenshots

No response

Example code

package main

import (
	"log/slog"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/data/binding"
	"fyne.io/fyne/v2/widget"
)
func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("List Data")
	myWindow.Resize(fyne.Size{800, 600})

	type user struct {
		ID int
		Name string
		Active bool
	}
	item1 := user{
		ID:     1,
		Name:   "User 1",
		Active: true,
	}
	item2 := user{
		ID:     2,
		Name:   "User 2",
		Active: false,
	}
	item3 := user{
		ID:     3,
		Name:   "User 3",
		Active: true,
	}

	l := []any{item1, item2, item3}


	data := binding.NewUntypedList()
	err := data.Set(l)
	if err != nil {
		panic(err)
	}

	list := widget.NewListWithData(data,
		func() fyne.CanvasObject {
			return widget.NewLabel("template")
		},
		func(i binding.DataItem, o fyne.CanvasObject) {
			u, _ := i.(binding.Untyped).Get()
			usr := u.(user)
			slog.Info("list update", "name", usr.Name)
		},
	)

	myWindow.SetContent(container.NewBorder(nil, nil, nil, nil, list))
	myWindow.ShowAndRun()

}

Fyne version

fyne version v2.4.4

Go compiler version

1.22.0

Operating system and version

M2 macOS 14.4

Additional Information

No response

@BillBuilt BillBuilt added the unverified A bug that has been reported but not verified label Mar 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
unverified A bug that has been reported but not verified
Projects
None yet
Development

No branches or pull requests

1 participant