Skip to content

page.update() doesn't work when I operate the color picker multiple times #20

@calocenrieti

Description

@calocenrieti

problem

page.update() doesn't work when I operate the color picker multiple times

When you operate the color picker only once, the start and stop buttons on the page will work correctly thanks to page.update().
If you operate the color picker multiple times, page.update() will no longer be performed and the page will become inoperable.

code

from flet_contrib.color_picker import ColorPicker
import flet as ft

def main(page: ft.Page):

    def color_picker_example():

        async def open_color_picker(e):
            e.control.page.dialog = d
            d.open = True
            await e.control.page.update_async()

        color_picker = ColorPicker(color="#c8df6f", width=300)
        color_icon = ft.IconButton(icon=ft.icons.BRUSH, on_click=open_color_picker)

        async def change_color(e):
            color_icon.icon_color = color_picker.color
            d.open = False
            await e.control.page.update_async()

        async def close_dialog(e):
            d.open = False
            await d.update_async()

        d = ft.AlertDialog(
            content=color_picker,
            actions=[
                ft.TextButton("OK", on_click=change_color),
                ft.TextButton("Cancel", on_click=close_dialog),
            ],
            actions_alignment=ft.MainAxisAlignment.END,
            on_dismiss=change_color,
        )

        return color_icon

    def loop_func():
        while True:
            if start_button.disabled==False:
                break

    def snack_bar_message(mes):
        page.snack_bar = ft.SnackBar(ft.Text(mes))
        page.snack_bar.open = True
        page.snack_bar.update

    def start_clicked(e):
        example1.disabled=True
        example2.disabled=True
        example3.disabled=True
        stop_button.disabled=False
        start_button.disabled=True
        snack_bar_message('start')
        page.update()
        loop_func()

    def stop_clicked(e):
        example1.disabled=False
        example2.disabled=False
        example3.disabled=False
        start_button.disabled=False
        stop_button.disabled=True
        snack_bar_message('stop')
        page.update()

    example1=color_picker_example()
    example2=color_picker_example()
    example3=color_picker_example()

    page.snack_bar = ft.SnackBar(
        content=ft.Text("Hello, world!"),
        action="Alright!",
    )

    start_button=ft.ElevatedButton(
                    "Start",
                    icon=ft.icons.AUTO_FIX_HIGH,
                    icon_color=ft.colors.BLUE,
                    on_click=start_clicked,
                    disabled=False,
                    )


    stop_button=ft.ElevatedButton(
                    "STOP",
                    icon=ft.icons.STOP,
                    icon_color='',
                    on_click=stop_clicked,
                    disabled=True,
                    )

    page.add(
        ft.Row(controls=
            [
                ft.Text("sample", theme_style=ft.TextThemeStyle.BODY_LARGE),
            ]
            ),
        ft.Row(controls=[
                example1,
                example2,
                example3
                ]
            ),
        ft.Row(controls=
            [
                start_button,
                stop_button,
                ]
            ),
        ),
ft.app(target=main)

OS、Flet ver.

OS:Windows11
python:3.11
Flet version:0.24.1

video

https://youtu.be/6f7rsU12avU

remarks

Maybe it's related to issue #3571.
flet-dev/flet#3571

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions