bug: find_by_key() does not find Tab or PopupMenuItem controls by key
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- Mezza giornata
- Idoneità per principianti
- 65/100
Direzione di ricerca
Start with TabControl._keyFromControl in controls/tabs.dart and buildPopupMenuEntries in utils/popup_menu.dart; the typed-key logic in control_widget.dart shows the pattern to reuse. Reproduce with the tests/test_keys.py sample via flet test linux --verbose. Done when find_by_key returns a count of 1 for tab-second and menu-item, and the existing button lookup still passes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Duplicate Check
- I have searched the opened issues and there are no duplicates
Describe the bug
In integration tests, Tester.find_by_key() returns no match for a key set on ft.Tab or ft.PopupMenuItem. Keys set on other controls, for example ft.Button, are found as expected.
Code sample
Code
# src/main.py
import flet as ft
def main(page: ft.Page):
page.add(
ft.Tabs(
length=2,
content=ft.TabBar(
tabs=[
ft.Tab(label="First", key="tab-first"),
ft.Tab(label="Second", key="tab-second"),
]
),
),
ft.PopupMenuButton(
key="menu",
items=[ft.PopupMenuItem(content="Item", key="menu-item")],
),
ft.Button("Button", key="button"),
)
ft.run(main)
# tests/test_keys.py
import flet.testing as ftt
async def test_tab_key(flet_app: ftt.FletTestApp):
tester = flet_app.tester
await tester.pump_and_settle()
assert (await tester.find_by_key("button")).count == 1 # passes
assert (await tester.find_by_key("tab-second")).count == 1 # fails: 0
async def test_popup_menu_item_key(flet_app: ftt.FletTestApp):
tester = flet_app.tester
await tester.pump_and_settle()
await tester.tap(await tester.find_by_key("menu"))
await tester.pump_and_settle()
assert (await tester.find_by_key("menu-item")).count == 1 # fails: 0
To reproduce
- Create a project with
src/main.pyandtests/test_keys.pyfrom the code sample. - Run
flet test linux --verbose. - In
test_tab_key, thebuttonkey is found, butfind_by_key("tab-second")returns a count of 0. - In
test_popup_menu_item_key, after opening the menu,find_by_key("menu-item")returns a count of 0.
Expected behavior
find_by_key() finds Tab and PopupMenuItem controls by their key, the same way it finds other controls.
Screenshots / Videos
Captures
[Upload media here]
Operating System
Linux
Operating system details
Ubuntu 24.04 on WSL2
Flet version
1.0.4
Regression
I'm not sure / I don't know
Suggestions
controls/tabs.dart: TabControl._keyFromControl returns ValueKey(controlKey.value). Because controlKey.value is typed as Object, this creates a ValueKey<Object>, which is not equal to the ValueKey<String> used by find_by_key(). ControlWidget already handles this by creating a typed key (see the comment in control_widget.dart), but TabControl does not use that logic.
utils/popup_menu.dart: buildPopupMenuEntries does not pass the item's key to the Flutter PopupMenuItem or CheckedPopupMenuItem.
Reusing the typed-key logic from ControlWidget in both places should fix this. This is still the case on the main branch.
Logs
Logs
=================================== FAILURES ===================================
_________________________________ test_tab_key _________________________________
flet_app = <flet.testing.flet_test_app.FletTestApp object at 0x7f575f1ad400>
async def test_tab_key(flet_app: ftt.FletTestApp):
tester = flet_app.tester
await tester.pump_and_settle()
assert (await tester.find_by_key("button")).count == 1 # passes
> assert (await tester.find_by_key("tab-second")).count == 1 # fails: 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E assert 0 == 1
E + where 0 = Finder(id=1, count=0, index=0).count
tests/test_keys.py:8: AssertionError
___________________________ test_popup_menu_item_key ___________________________
flet_app = <flet.testing.flet_test_app.FletTestApp object at 0x7f575f1b5a90>
async def test_popup_menu_item_key(flet_app: ftt.FletTestApp):
tester = flet_app.tester
await tester.pump_and_settle()
await tester.tap(await tester.find_by_key("menu"))
await tester.pump_and_settle()
> assert (await tester.find_by_key("menu-item")).count == 1 # fails: 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E assert 0 == 1
E + where 0 = Finder(id=1, count=0, index=0).count
tests/test_keys.py:16: AssertionError
=========================== short test summary info ============================
FAILED tests/test_keys.py::test_tab_key - assert 0 == 1
FAILED tests/test_keys.py::test_popup_menu_item_key - assert 0 == 1
========================= 2 failed in 73.11s (0:01:13) =========================
Additional details
Workaround: set the key on a Text control used as the label or content, for example ft.Tab(label=ft.Text("Second", key="tab-second")) or ft.PopupMenuItem(content=ft.Text("Item", key="menu-item")). find_by_key() then finds the control and tapping it works.
Unrelated side note: Python 3.15.0 was released on October 9, 2026, but flet build and flet test in Flet 1.0.4 only support Python 3.12 to 3.14 (python-build release 20260921). Projects with requires-python >= 3.15 cannot be built or tested yet. Support for 3.15 would be appreciated.
- Lingua principale
- Python
- Stelle
- 17.4k
- Fork
- 728
- Merge medio
- 1g 11h
- PR unite (30g)
- 56
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di flet-dev/flet
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
flet build: common [tool.flet.deep_linking] is ignored on Android and iOSForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug packaging platform: mobile
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni
-
bug controls
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
I maintainer di solito rispondono entro 2 giorni
-
flet build macos: default the .app name to the product name, not the project nameForse già presa @FeodorFitsner l’ha presa 5 giorni fa. Apertapackaging platform: macOS
flet-dev/flet#6966 · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di flet-dev/flet
Issue simili
-
tunneld on Windows: Wi-Fi devices are not discovered because uvicorn runs on a ProactorEventLoopAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
doronz88/pymobiledevice3#2051 ·
I maintainer di solito rispondono entro 1 giorno
-
Remove DatacircleAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
collabnix/awesome-mcp-lists#230 ·
I maintainer di solito rispondono entro 9 giorni
-
Groc schedules with out of range values pass config validation and fail later when the scheduler is builtForse già presa @auraseb l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
autowarefoundation/autoware_carla_scenario#342 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ianktoo/project-monitor#14 ·