From acaeb0092e17238f07d2b2b50a95c937bc6dbd40 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Tue, 21 Nov 2023 01:06:20 +0100 Subject: [PATCH] add `thumb_icon` to `Switch` --- package/lib/src/controls/switch.dart | 3 +++ package/lib/src/utils/icons.dart | 17 +++++++++++++++++ .../packages/flet-core/src/flet_core/switch.py | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/package/lib/src/controls/switch.dart b/package/lib/src/controls/switch.dart index 31a371579c..225f7b3662 100644 --- a/package/lib/src/controls/switch.dart +++ b/package/lib/src/controls/switch.dart @@ -8,6 +8,7 @@ import '../models/control.dart'; import '../protocol/update_control_props_payload.dart'; import '../utils/buttons.dart'; import '../utils/colors.dart'; +import '../utils/icons.dart'; import 'create_control.dart'; import 'list_tile.dart'; @@ -110,6 +111,8 @@ class _SwitchControlState extends State { widget.control.attrString("inactiveTrackColor", "")!), thumbColor: parseMaterialStateColor( Theme.of(context), widget.control, "thumbColor"), + thumbIcon: parseMaterialStateIcon( + Theme.of(context), widget.control, "thumbIcon"), trackColor: parseMaterialStateColor( Theme.of(context), widget.control, "trackColor"), value: _value, diff --git a/package/lib/src/utils/icons.dart b/package/lib/src/utils/icons.dart index fbbb0e8293..77843fd0d0 100644 --- a/package/lib/src/utils/icons.dart +++ b/package/lib/src/utils/icons.dart @@ -1,7 +1,24 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; +import '../models/control.dart'; import 'material_icons.dart'; +import 'material_state.dart'; IconData? getMaterialIcon(String iconName) { return materialIcons[iconName.toLowerCase()]; } + +MaterialStateProperty? parseMaterialStateIcon( + ThemeData theme, Control control, String propName) { + var v = control.attrString(propName, null); + if (v == null) { + return null; + } + + final j1 = json.decode(v); + + return getMaterialStateProperty( + j1, (jv) => Icon(getMaterialIcon(jv as String)), null); +} diff --git a/sdk/python/packages/flet-core/src/flet_core/switch.py b/sdk/python/packages/flet-core/src/flet_core/switch.py index 2052f4a25e..88e29020fa 100644 --- a/sdk/python/packages/flet-core/src/flet_core/switch.py +++ b/sdk/python/packages/flet-core/src/flet_core/switch.py @@ -94,6 +94,7 @@ def __init__( inactive_thumb_color: Optional[str] = None, inactive_track_color: Optional[str] = None, thumb_color: Union[None, str, Dict[MaterialState, str]] = None, + thumb_icon: Union[None, str, Dict[MaterialState, str]] = None, track_color: Union[None, str, Dict[MaterialState, str]] = None, on_change=None, on_focus=None, @@ -137,6 +138,7 @@ def __init__( self.inactive_thumb_color = inactive_thumb_color self.inactive_track_color = inactive_track_color self.thumb_color = thumb_color + self.thumb_icon = thumb_icon self.track_color = track_color self.on_change = on_change self.on_focus = on_focus @@ -148,6 +150,7 @@ def _get_control_name(self): def _before_build_command(self): super()._before_build_command() self._set_attr_json("thumbColor", self.__thumb_color) + self._set_attr_json("thumbIcon", self.__thumb_icon) self._set_attr_json("trackColor", self.__track_color) # value @@ -238,6 +241,15 @@ def thumb_color(self) -> Union[None, str, Dict[MaterialState, str]]: def thumb_color(self, value: Union[None, str, Dict[MaterialState, str]]): self.__thumb_color = value + # thumb_icon + @property + def thumb_icon(self) -> Union[None, str, Dict[MaterialState, str]]: + return self.__thumb_icon + + @thumb_icon.setter + def thumb_icon(self, value: Union[None, str, Dict[MaterialState, str]]): + self.__thumb_icon = value + # track_color @property def track_color(self) -> Union[None, str, Dict[MaterialState, str]]: