flet icon indicating copy to clipboard operation
flet copied to clipboard

bug: Window properties updating is broken

Open bl1nch opened this issue 1 month ago • 0 comments

Duplicate Check

  • [x] I have searched the opened issues and there are no duplicates

Describe the bug

Some window properties don't update until you update others. It also depends on where we're trying to update these properties.

Code sample

For example if we run this, the window title won't update, even though print(page.title) returns "Test Title":

import flet as ft


async def before_main(page: ft.Page):
    page.title = "Test Title"


async def main(page: ft.Page):
    print(page.title)


ft.run(main, before_main=before_main)

But if we run this, both the window title and its size will be updated:

import flet as ft


async def before_main(page: ft.Page):
    page.title = "Test Title"


async def main(page: ft.Page):
    page.window.width = 500


ft.run(main, before_main=before_main)

This also happens inside main. For example, this code doesn't update page.title:

import flet as ft


async def before_main(page: ft.Page):
    pass


async def main(page: ft.Page):
    page.title = "Test Title"


ft.run(main, before_main=before_main)

But this code works:

import flet as ft


async def before_main(page: ft.Page):
    pass


async def main(page: ft.Page):
    page.title = "Test Title"
    page.window.width = 500


ft.run(main, before_main=before_main)

There are other properties that work differently, for example page.window.prevent_close. This code works:

import flet as ft


async def before_main(page: ft.Page):
    pass


async def main(page: ft.Page):
    page.window.prevent_close = True


ft.run(main, before_main=before_main)

But this code doesn't work:

import flet as ft


async def before_main(page: ft.Page):
    page.window.prevent_close = True


async def main(page: ft.Page):
    print(page.window.prevent_close)


ft.run(main, before_main=before_main)

And this code also doesn't work because inside main page.window.prevent_close is already True, and when we set page.window.prevent_close = True again, it has no effect due to the diffing algorithm of object patching:

import flet as ft


async def before_main(page: ft.Page):
    page.window.prevent_close = True


async def main(page: ft.Page):
    page.window.prevent_close = True


ft.run(main, before_main=before_main)

To reproduce

Expected behavior

No response

Screenshots / Videos

No response

Operating System

Windows

Operating system details

11

Flet version

0.70.0.dev7031

Regression

Yes, it used to work in a previous Flet version (please specify the version in additional details)

Suggestions

No response

Logs

No response

Additional details

Possible regression due to https://github.com/flet-dev/flet/pull/5838

bl1nch avatar Dec 17 '25 10:12 bl1nch