我的页面.drawer出错:AssertionError:控制项必须先添加到页面

0 投票
1 回答
58 浏览
提问于 2025-04-13 14:54
import flet as ft
from textos import Welcome

def main(page = ft.Page):
page.title = 'Mejora tu glucemia'
page.padding = ft.padding.only(
    top = 0,
    bottom = 0,
    left = 0,
    right = 0
)
page.window_height = 900
page.window_width = 400


header_height = page.window_height * 0.08
body_height = page.window_height - header_height

def navigation_drawer_changed(e):
    selected = e.control.selected_index
    if selected == 0:
        page.go('/')
    elif selected == 1:
        page.go('/cuaderno')


page.drawer = ft.NavigationDrawer(
    on_change= navigation_drawer_changed,
    controls = [
        ft.Container(height=12),
        ft.NavigationDrawerDestination(
            label = 'Inicio',
            icon = ft.icons.DOOR_BACK_DOOR_OUTLINED,
            selected_icon_content = ft.Icon(ft.icons.DOOR_BACK_DOOR)
        ),
        ft.Container(height=12),
        ft.Container(height=2, bgcolor= ft.colors.BLACK),
        ft.Container(height=12),
        ft.NavigationDrawerDestination(
            label = 'Cuaderno',
            icon = ft.icons.BOOKMARK_BORDER_OUTLINED,
            selected_icon_content = ft.Icon(ft.icons.BOOKMARK)
        ),
        ft.Container(height=12),
        ft.NavigationDrawerDestination(
            label = 'Añadir notas',
            icon = ft.icons.BORDER_COLOR_OUTLINED,
            selected_icon_content = ft.Icon(ft.icons.BORDER_COLOR)
        )
    ]
)


def show_drawer(e):
    page.drawer.open = True
    page.drawer.update()



header = ft.Container(
    height= header_height,
    padding = ft.padding.only(
        left = page.window_width*0.05,
        right = page.window_width*0.05
    ),
    shadow = ft.BoxShadow(
        blur_radius=1,
        spread_radius=1,
        color=ft.colors.BLACK,
        offset=ft.Offset(0, 1),
    ),
    bgcolor = ft.colors.BLACK,
    content = ft.Column(
        alignment = 'center',
        controls= [
            ft.Row(
                alignment= 'spaceBetween',
                controls = [
                    ft.IconButton(icon = ft.icons.MENU, on_click=show_drawer)
                ]
            )
        ]
    )
)


class PaginaInicio(ft.UserControl):
    def build(self):
        return ft.Column(
            spacing= 0,
            controls= [
                header,
                ft.Container(
                    height= body_height,
                    bgcolor= ft.colors.WHITE,
                    content = ft.Row(
                        alignment= 'center',
                        controls = [
                            ft.Column(
                                alignment= 'center',
                                controls= [
                                    Welcome
                                ]
                            )
                        ]
                    )
                )
            ]
        )


class PaginaCuaderno(ft.UserControl):
    def build(self):
        return ft.Column(
            spacing= 0,
            controls= [
                header,
                ft.Container(
                    height= body_height,
                    bgcolor= ft.colors.WHITE,
                    content = ft.Row(
                        alignment= 'center',
                        controls = [
                            ft.Column(
                                alignment= 'center',
                                controls= [
                                    
                                ]
                            )
                        ]
                    )
                )
            ]
        )


pagina_inicio = PaginaInicio()
pagina_cuaderno = PaginaCuaderno()

pages = {
    '/': ft.View(
        "/",
        [
            pagina_inicio
        ]
    ),
    '/cuaderno': ft.View(
        "/cuaderno",
        [
            pagina_cuaderno
        ]
    )
}

def route_change(route):
    print('a')
    page.views.clear()
    page.views.append(
        pages[page.route]
    )
    page.update()


page.on_route_change = route_change
page.go(page.route)

if __name__ == '__main__':
    ft.app(target=main)

我试着用 page.add(page.drawer)、page.add(header) 和 page.add(pagina_inicio) 这些方法来添加内容。但是当我使用 page.update() 函数时,flet 提示我必须先把 page.drawer 加入到页面中。我觉得我可能添加错了什么,或者应该用其他方式来使用 page.update()。网上没有相关的教程或者人解决这个问题,所以我非常希望能得到一些帮助。

1 个回答

暂无回答

撰写回答