diff --git a/sdk/python/packages/flet-core/src/flet_core/clipboard.py b/sdk/python/packages/flet-core/src/flet_core/clipboard.py index 31efa8bc5..9c346a2cb 100644 --- a/sdk/python/packages/flet-core/src/flet_core/clipboard.py +++ b/sdk/python/packages/flet-core/src/flet_core/clipboard.py @@ -26,7 +26,7 @@ def __init__( def _get_control_name(self): return "clipboard" - def _is_isolated(self): + def is_isolated(self): return True def set_data(self, data: str): diff --git a/sdk/python/packages/flet-core/src/flet_core/control.py b/sdk/python/packages/flet-core/src/flet_core/control.py index fd0ac18d4..f43f38f43 100644 --- a/sdk/python/packages/flet-core/src/flet_core/control.py +++ b/sdk/python/packages/flet-core/src/flet_core/control.py @@ -8,12 +8,6 @@ from flet_core.ref import Ref from flet_core.types import ResponsiveNumber -try: - from typing import Literal -except ImportError: - from typing_extensions import Literal - - if TYPE_CHECKING: from .page import Page @@ -54,10 +48,10 @@ def __init__( if ref: ref.current = self - def _is_isolated(self): + def is_isolated(self): return False - def _build(self): + def build(self): pass def before_update(self): @@ -407,7 +401,7 @@ def build_update_commands( commands, added_controls, removed_controls, - isolated=ctrl._is_isolated(), + isolated=ctrl.is_isolated(), ) n += 1 elif tag == "insert": @@ -451,7 +445,18 @@ def _remove_control_recursively(self, index, control): def _build_add_commands(self, indent=0, index=None, added_controls=None): if index: self.page = index["page"] - self._build() + content = self.build() + + # fix for UserControl + if content is not None: + if isinstance(content, Control) and hasattr(self, "controls"): + self.controls = [content] + elif ( + isinstance(content, List) + and hasattr(self, "controls") + and all(isinstance(control, Control) for control in content) + ): + self.controls = content # remove control from index if self.__uid and index is not None and self.__uid in index: diff --git a/sdk/python/packages/flet-core/src/flet_core/haptic_feedback.py b/sdk/python/packages/flet-core/src/flet_core/haptic_feedback.py index 97ae90a22..f09fc3521 100644 --- a/sdk/python/packages/flet-core/src/flet_core/haptic_feedback.py +++ b/sdk/python/packages/flet-core/src/flet_core/haptic_feedback.py @@ -47,7 +47,7 @@ def __init__( def _get_control_name(self): return "hapticfeedback" - def _is_isolated(self): + def is_isolated(self): return True def heavy_impact(self): diff --git a/sdk/python/packages/flet-core/src/flet_core/matplotlib_chart.py b/sdk/python/packages/flet-core/src/flet_core/matplotlib_chart.py index cc3d078cb..ea307b0a8 100644 --- a/sdk/python/packages/flet-core/src/flet_core/matplotlib_chart.py +++ b/sdk/python/packages/flet-core/src/flet_core/matplotlib_chart.py @@ -126,10 +126,10 @@ def __init__( self.original_size = original_size self.transparent = transparent - def _is_isolated(self): + def is_isolated(self): return self.__isolated - def _build(self): + def build(self): self.alignment = alignment.center self.__img = Image(fit="fill") self.content = self.__img diff --git a/sdk/python/packages/flet-core/src/flet_core/plotly_chart.py b/sdk/python/packages/flet-core/src/flet_core/plotly_chart.py index 51270c081..387eb76e4 100644 --- a/sdk/python/packages/flet-core/src/flet_core/plotly_chart.py +++ b/sdk/python/packages/flet-core/src/flet_core/plotly_chart.py @@ -107,10 +107,10 @@ def __init__( self.isolated = isolated self.original_size = original_size - def _is_isolated(self): + def is_isolated(self): return self.__isolated - def _build(self): + def build(self): self.alignment = alignment.center self.__img = Image(fit="fill") self.content = self.__img diff --git a/sdk/python/packages/flet-core/src/flet_core/user_control.py b/sdk/python/packages/flet-core/src/flet_core/user_control.py index a89d8b402..87382174d 100644 --- a/sdk/python/packages/flet-core/src/flet_core/user_control.py +++ b/sdk/python/packages/flet-core/src/flet_core/user_control.py @@ -1,6 +1,3 @@ -from typing import List - -from flet_core.control import Control from flet_core.stack import Stack @@ -8,18 +5,5 @@ class UserControl(Stack): def build(self): pass - def _build(self): - content = self.build() - if isinstance(content, Control): - self.controls = [content] - elif isinstance(content, List) and all( - isinstance(control, Control) for control in content - ): - self.controls = content - else: - raise Exception( - f"{self.__class__.__name__}.build() method must be implemented and returning either Control or List[Control]." - ) - - def _is_isolated(self): + def is_isolated(self): return True