diff --git a/package/lib/src/controls/switch.dart b/package/lib/src/controls/switch.dart index 1e0846b5e..ba723bae7 100644 --- a/package/lib/src/controls/switch.dart +++ b/package/lib/src/controls/switch.dart @@ -6,6 +6,8 @@ import '../flet_app_services.dart'; import '../models/app_state.dart'; import '../models/control.dart'; import '../protocol/update_control_props_payload.dart'; +import '../utils/buttons.dart'; +import '../utils/colors.dart'; import 'create_control.dart'; enum LabelPosition { right, left } @@ -97,6 +99,18 @@ class _SwitchControlState extends State { var swtch = Switch( autofocus: autofocus, focusNode: _focusNode, + activeColor: HexColor.fromString(Theme.of(context), + widget.control.attrString("activeColor", "")!), + activeTrackColor: HexColor.fromString(Theme.of(context), + widget.control.attrString("activeTrackColor", "")!), + inactiveThumbColor: HexColor.fromString(Theme.of(context), + widget.control.attrString("inactiveThumbColor", "")!), + inactiveTrackColor: HexColor.fromString(Theme.of(context), + widget.control.attrString("inactiveTrackColor", "")!), + thumbColor: parseMaterialStateColor( + Theme.of(context), widget.control, "thumbColor"), + trackColor: parseMaterialStateColor( + Theme.of(context), widget.control, "trackColor"), value: _value, onChanged: !disabled ? (bool value) { diff --git a/sdk/python/flet/checkbox.py b/sdk/python/flet/checkbox.py index a8a9e113d..9ff9aea0c 100644 --- a/sdk/python/flet/checkbox.py +++ b/sdk/python/flet/checkbox.py @@ -110,10 +110,7 @@ def _get_control_name(self): def _before_build_command(self): super()._before_build_command() - fc = self.__fill_color - if fc is not None and not isinstance(fc, Dict): - fc = {"": fc} - self._set_attr_json("fillColor", fc) + self._set_attr_json("fillColor", self._wrap_attr_dict(self.__fill_color)) # value @property diff --git a/sdk/python/flet/radio.py b/sdk/python/flet/radio.py index e966f061f..9076d5bba 100644 --- a/sdk/python/flet/radio.py +++ b/sdk/python/flet/radio.py @@ -104,10 +104,7 @@ def _get_control_name(self): def _before_build_command(self): super()._before_build_command() - fc = self.__fill_color - if fc is not None and not isinstance(fc, Dict): - fc = {"": fc} - self._set_attr_json("fillColor", fc) + self._set_attr_json("fillColor", self._wrap_attr_dict(self.__fill_color)) # value @property diff --git a/sdk/python/flet/switch.py b/sdk/python/flet/switch.py index d46885d6c..ca62fb68e 100644 --- a/sdk/python/flet/switch.py +++ b/sdk/python/flet/switch.py @@ -1,7 +1,9 @@ from typing import Any, Optional, Union from beartype import beartype +from beartype.typing import Dict +from flet.buttons import MaterialState from flet.constrained_control import ConstrainedControl from flet.control import OptionalNumber from flet.ref import Ref @@ -57,6 +59,12 @@ def __init__( label_position: LabelPosition = None, value: Optional[bool] = None, autofocus: Optional[bool] = None, + active_color: Optional[str] = None, + active_track_color: Optional[str] = None, + inactive_thumb_color: Optional[str] = None, + inactive_track_color: Optional[str] = None, + thumb_color: Union[None, str, Dict[MaterialState, str]] = None, + track_color: Union[None, str, Dict[MaterialState, str]] = None, on_change=None, on_focus=None, on_blur=None, @@ -93,6 +101,12 @@ def __init__( self.label = label self.label_position = label_position self.autofocus = autofocus + self.active_color = active_color + self.active_track_color = active_track_color + self.inactive_thumb_color = inactive_thumb_color + self.inactive_track_color = inactive_track_color + self.thumb_color = thumb_color + self.track_color = track_color self.on_change = on_change self.on_focus = on_focus self.on_blur = on_blur @@ -100,6 +114,11 @@ def __init__( def _get_control_name(self): return "switch" + def _before_build_command(self): + super()._before_build_command() + self._set_attr_json("thumbColor", self._wrap_attr_dict(self.__thumb_color)) + self._set_attr_json("trackColor", self._wrap_attr_dict(self.__track_color)) + # value @property def value(self) -> Optional[bool]: @@ -139,6 +158,62 @@ def autofocus(self) -> Optional[bool]: def autofocus(self, value: Optional[bool]): self._set_attr("autofocus", value) + # active_color + @property + def active_color(self): + return self._get_attr("activeColor") + + @active_color.setter + def active_color(self, value): + self._set_attr("activeColor", value) + + # active_track_color + @property + def active_track_color(self): + return self._get_attr("activeTrackColor") + + @active_track_color.setter + def active_track_color(self, value): + self._set_attr("activeTrackColor", value) + + # inactive_thumb_color + @property + def inactive_thumb_color(self): + return self._get_attr("inactiveThumbColor") + + @inactive_thumb_color.setter + def inactive_thumb_color(self, value): + self._set_attr("inactiveThumbColor", value) + + # inactive_track_color + @property + def inactive_track_color(self): + return self._get_attr("inactiveTrackColor") + + @inactive_track_color.setter + def inactive_track_color(self, value): + self._set_attr("inactiveTrackColor", value) + + # thumb_color + @property + def thumb_color(self) -> Union[None, str, Dict[MaterialState, str]]: + return self.__thumb_color + + @thumb_color.setter + @beartype + def thumb_color(self, value: Union[None, str, Dict[MaterialState, str]]): + self.__thumb_color = value + + # track_color + @property + def track_color(self) -> Union[None, str, Dict[MaterialState, str]]: + return self.__track_color + + @track_color.setter + @beartype + def track_color(self, value: Union[None, str, Dict[MaterialState, str]]): + self.__track_color = value + # on_change @property def on_change(self):