Skip to content

Commit 93cce26

Browse files
authored
Migrate colors and icons variables to Enums (#4180)
* icons as Enum * colors as Enum * sort __init__.py imports * add random_color and random_icon methods for backwards compatibility * update typing of color properties to use ColorValue * create MaterialColors and CupertinoColors * create test_colors.py * create MaterialIcons and CupertinoIcons * update typing of icon properties to use IconValue * update icon/colors tests * refactor ColorValue and IconValue * Merge 'main' branch * fix failing CI: ColorEnums and IconEnums as tuples (for isinstance checks in lower python versions) * rename MaterialIcons to Icons and MaterialColors to Colors | add deprecation warning * improve Control.copy_attrs
1 parent 7810f71 commit 93cce26

File tree

106 files changed

+23341
-12044
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+23341
-12044
lines changed

packages/flet/lib/src/controls/tabs.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,12 @@ class _TabsControlState extends State<TabsControl>
201201

202202
var tabs = viewModel.controlViews.map((tabView) {
203203
var iconString = parseIcon(tabView.control.attrString("icon"));
204-
var iconContentCtrls = tabView.children
205-
.where((c) => c.name == "icon_content" && c.isVisible);
204+
var iconCtrls = tabView.children
205+
.where((c) => c.name == "icon" && c.isVisible);
206206

207-
var icon = iconContentCtrls.isNotEmpty
207+
var icon = iconCtrls.isNotEmpty
208208
? createControl(
209-
widget.control, iconContentCtrls.first.id, disabled,
209+
widget.control, iconCtrls.first.id, disabled,
210210
parentAdaptive: adaptive)
211211
: iconString != null
212212
? Icon(iconString)

sdk/python/packages/flet-core/src/flet_core/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55
border,
66
border_radius,
77
canvas,
8-
colors,
9-
cupertino_colors,
10-
cupertino_icons,
118
dropdown,
12-
icons,
139
margin,
1410
padding,
1511
painting,
@@ -93,6 +89,7 @@
9389
from flet_core.checkbox import Checkbox
9490
from flet_core.chip import Chip
9591
from flet_core.circle_avatar import CircleAvatar
92+
from flet_core.colors import Colors, colors
9693
from flet_core.column import Column
9794
from flet_core.container import Container, ContainerTapEvent
9895
from flet_core.control import Control
@@ -105,6 +102,7 @@
105102
from flet_core.cupertino_bottom_sheet import CupertinoBottomSheet
106103
from flet_core.cupertino_button import CupertinoButton
107104
from flet_core.cupertino_checkbox import CupertinoCheckbox
105+
from flet_core.cupertino_colors import CupertinoColors, cupertino_colors
108106
from flet_core.cupertino_context_menu import CupertinoContextMenu
109107
from flet_core.cupertino_context_menu_action import CupertinoContextMenuAction
110108
from flet_core.cupertino_date_picker import (
@@ -114,6 +112,7 @@
114112
)
115113
from flet_core.cupertino_dialog_action import CupertinoDialogAction
116114
from flet_core.cupertino_filled_button import CupertinoFilledButton
115+
from flet_core.cupertino_icons import CupertinoIcons, cupertino_icons
117116
from flet_core.cupertino_list_tile import CupertinoListTile
118117
from flet_core.cupertino_navigation_bar import CupertinoNavigationBar
119118
from flet_core.cupertino_picker import CupertinoPicker
@@ -202,6 +201,7 @@
202201
from flet_core.haptic_feedback import HapticFeedback
203202
from flet_core.icon import Icon
204203
from flet_core.icon_button import IconButton
204+
from flet_core.icons import Icons, icons
205205
from flet_core.image import Image
206206
from flet_core.interactive_viewer import (
207207
InteractiveViewer,

sdk/python/packages/flet-core/src/flet_core/alert_dialog.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
from flet_core.text_style import TextStyle
99
from flet_core.types import (
1010
ClipBehavior,
11+
ColorEnums,
12+
ColorValue,
1113
MainAxisAlignment,
12-
PaddingValue,
1314
OptionalControlEventCallable,
15+
PaddingValue,
1416
)
1517

1618

@@ -69,7 +71,7 @@ def __init__(
6971
title: Optional[Control] = None,
7072
content: Optional[Control] = None,
7173
actions: Optional[List[Control]] = None,
72-
bgcolor: Optional[str] = None,
74+
bgcolor: Optional[ColorValue] = None,
7375
elevation: OptionalNumber = None,
7476
icon: Optional[Control] = None,
7577
open: bool = False,
@@ -81,9 +83,9 @@ def __init__(
8183
inset_padding: PaddingValue = None,
8284
icon_padding: PaddingValue = None,
8385
action_button_padding: PaddingValue = None,
84-
surface_tint_color: Optional[str] = None,
85-
shadow_color: Optional[str] = None,
86-
icon_color: Optional[str] = None,
86+
surface_tint_color: Optional[ColorValue] = None,
87+
shadow_color: Optional[ColorValue] = None,
88+
icon_color: Optional[ColorValue] = None,
8789
scrollable: Optional[bool] = None,
8890
actions_overflow_button_spacing: OptionalNumber = None,
8991
alignment: Optional[Alignment] = None,
@@ -187,39 +189,43 @@ def open(self, value: Optional[bool]):
187189

188190
# bgcolor
189191
@property
190-
def bgcolor(self) -> Optional[str]:
191-
return self._get_attr("bgcolor")
192+
def bgcolor(self) -> Optional[ColorValue]:
193+
return self.__bgcolor
192194

193195
@bgcolor.setter
194-
def bgcolor(self, value: Optional[str]):
195-
self._set_attr("bgcolor", value)
196+
def bgcolor(self, value: Optional[ColorValue]):
197+
self.__bgcolor = value
198+
self._set_enum_attr("bgcolor", value, ColorEnums)
196199

197200
# shadow_color
198201
@property
199-
def shadow_color(self) -> Optional[str]:
200-
return self._get_attr("shadowColor")
202+
def shadow_color(self) -> Optional[ColorValue]:
203+
return self.__shadow_color
201204

202205
@shadow_color.setter
203-
def shadow_color(self, value: Optional[str]):
204-
self._set_attr("shadowColor", value)
206+
def shadow_color(self, value: Optional[ColorValue]):
207+
self.__shadow_color = value
208+
self._set_enum_attr("shadowColor", value, ColorEnums)
205209

206210
# surface_tint_color
207211
@property
208-
def surface_tint_color(self) -> Optional[str]:
209-
return self._get_attr("surfaceTintColor")
212+
def surface_tint_color(self) -> Optional[ColorValue]:
213+
return self.__surface_tint_color
210214

211215
@surface_tint_color.setter
212-
def surface_tint_color(self, value: Optional[str]):
213-
self._set_attr("surfaceTintColor", value)
216+
def surface_tint_color(self, value: Optional[ColorValue]):
217+
self.__surface_tint_color = value
218+
self._set_enum_attr("surfaceTintColor", value, ColorEnums)
214219

215220
# icon_color
216221
@property
217-
def icon_color(self) -> Optional[str]:
218-
return self._get_attr("iconColor")
222+
def icon_color(self) -> Optional[ColorValue]:
223+
return self.__icon_color
219224

220225
@icon_color.setter
221-
def icon_color(self, value: Optional[str]):
222-
self._set_attr("iconColor", value)
226+
def icon_color(self, value: Optional[ColorValue]):
227+
self.__icon_color = value
228+
self._set_enum_attr("iconColor", value, ColorEnums)
223229

224230
# elevation
225231
@property

sdk/python/packages/flet-core/src/flet_core/app_bar.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from typing import List, Optional, Any
1+
from typing import Any, List, Optional
22

33
from flet_core.adaptive_control import AdaptiveControl
44
from flet_core.buttons import OutlinedBorder
55
from flet_core.control import Control
66
from flet_core.ref import Ref
77
from flet_core.text_style import TextStyle
8-
from flet_core.types import ClipBehavior, OptionalNumber
8+
from flet_core.types import ClipBehavior, ColorEnums, ColorValue, OptionalNumber
99

1010

1111
class AppBar(AdaptiveControl):
@@ -60,12 +60,12 @@ def __init__(
6060
title: Optional[Control] = None,
6161
center_title: Optional[bool] = None,
6262
toolbar_height: OptionalNumber = None,
63-
color: Optional[str] = None,
64-
bgcolor: Optional[str] = None,
63+
color: Optional[ColorValue] = None,
64+
bgcolor: Optional[ColorValue] = None,
6565
elevation: OptionalNumber = None,
6666
elevation_on_scroll: OptionalNumber = None,
67-
shadow_color: Optional[str] = None,
68-
surface_tint_color: Optional[str] = None,
67+
shadow_color: Optional[ColorValue] = None,
68+
surface_tint_color: Optional[ColorValue] = None,
6969
clip_behavior: Optional[ClipBehavior] = None,
7070
force_material_transparency: Optional[bool] = None,
7171
is_secondary: Optional[bool] = None,
@@ -252,39 +252,43 @@ def toolbar_height(self, value: OptionalNumber):
252252

253253
# color
254254
@property
255-
def color(self) -> Optional[str]:
256-
return self._get_attr("color")
255+
def color(self) -> Optional[ColorValue]:
256+
return self.__color
257257

258258
@color.setter
259-
def color(self, value: Optional[str]):
260-
self._set_attr("color", value)
259+
def color(self, value: Optional[ColorValue]):
260+
self.__color = value
261+
self._set_enum_attr("color", value, ColorEnums)
261262

262263
# bgcolor
263264
@property
264-
def bgcolor(self) -> Optional[str]:
265-
return self._get_attr("bgcolor")
265+
def bgcolor(self) -> Optional[ColorValue]:
266+
return self.__bgcolor
266267

267268
@bgcolor.setter
268-
def bgcolor(self, value: Optional[str]):
269-
self._set_attr("bgcolor", value)
269+
def bgcolor(self, value: Optional[ColorValue]):
270+
self.__bgcolor = value
271+
self._set_enum_attr("bgcolor", value, ColorEnums)
270272

271273
# shadow_color
272274
@property
273-
def shadow_color(self) -> Optional[str]:
274-
return self._get_attr("shadowColor")
275+
def shadow_color(self) -> Optional[ColorValue]:
276+
return self.__shadow_color
275277

276278
@shadow_color.setter
277-
def shadow_color(self, value: Optional[str]):
278-
self._set_attr("shadowColor", value)
279+
def shadow_color(self, value: Optional[ColorValue]):
280+
self.__shadow_color = value
281+
self._set_enum_attr("shadowColor", value, ColorEnums)
279282

280283
# surface_tint_color
281284
@property
282-
def surface_tint_color(self) -> Optional[str]:
283-
return self._get_attr("surfaceTintColor")
285+
def surface_tint_color(self) -> Optional[ColorValue]:
286+
return self.__surface_tint_color
284287

285288
@surface_tint_color.setter
286-
def surface_tint_color(self, value: Optional[str]):
287-
self._set_attr("surfaceTintColor", value)
289+
def surface_tint_color(self, value: Optional[ColorValue]):
290+
self.__surface_tint_color = value
291+
self._set_enum_attr("surfaceTintColor", value, ColorEnums)
288292

289293
# is_secondary
290294
@property

sdk/python/packages/flet-core/src/flet_core/badge.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from flet_core.alignment import Alignment
55
from flet_core.text_style import TextStyle
6-
from flet_core.types import OffsetValue, OptionalNumber, PaddingValue
6+
from flet_core.types import ColorValue, OffsetValue, OptionalNumber, PaddingValue
77

88

99
@dataclass
@@ -14,12 +14,12 @@ class Badge:
1414
text: Optional[str] = None
1515
offset: OffsetValue = None
1616
alignment: Optional[Alignment] = None
17-
bgcolor: Optional[str] = None
17+
bgcolor: Optional[ColorValue] = None
1818
label_visible: Optional[bool] = None
1919
large_size: OptionalNumber = None
2020
padding: Optional[PaddingValue] = None
2121
small_size: OptionalNumber = None
22-
text_color: Optional[str] = None
22+
text_color: Optional[ColorValue] = None
2323
text_style: Optional[TextStyle] = None
2424

2525

sdk/python/packages/flet-core/src/flet_core/banner.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
from flet_core.ref import Ref
55
from flet_core.text_style import TextStyle
66
from flet_core.types import (
7-
PaddingValue,
7+
ColorEnums,
8+
ColorValue,
89
MarginValue,
910
OptionalControlEventCallable,
11+
PaddingValue,
1012
)
1113

1214

@@ -63,10 +65,10 @@ def __init__(
6365
leading_padding: Optional[PaddingValue] = None,
6466
content_padding: Optional[PaddingValue] = None,
6567
force_actions_below: Optional[bool] = None,
66-
bgcolor: Optional[str] = None,
67-
surface_tint_color: Optional[str] = None,
68-
shadow_color: Optional[str] = None,
69-
divider_color: Optional[str] = None,
68+
bgcolor: Optional[ColorValue] = None,
69+
surface_tint_color: Optional[ColorValue] = None,
70+
shadow_color: Optional[ColorValue] = None,
71+
divider_color: Optional[ColorValue] = None,
7072
elevation: OptionalNumber = None,
7173
margin: MarginValue = None,
7274
content_text_style: Optional[TextStyle] = None,
@@ -213,12 +215,13 @@ def force_actions_below(self, value: Optional[bool]):
213215

214216
# bgcolor
215217
@property
216-
def bgcolor(self) -> Optional[str]:
217-
return self._get_attr("bgColor")
218+
def bgcolor(self) -> Optional[ColorValue]:
219+
return self.__bgcolor
218220

219221
@bgcolor.setter
220-
def bgcolor(self, value: Optional[str]):
221-
self._set_attr("bgColor", value)
222+
def bgcolor(self, value: Optional[ColorValue]):
223+
self.__bgcolor = value
224+
self._set_enum_attr("bgColor", value, ColorEnums)
222225

223226
# content_text_style
224227
@property
@@ -231,30 +234,33 @@ def content_text_style(self, value: Optional[TextStyle]):
231234

232235
# shadow_color
233236
@property
234-
def shadow_color(self) -> Optional[str]:
235-
return self._get_attr("shadowColor")
237+
def shadow_color(self) -> Optional[ColorValue]:
238+
return self.__shadow_color
236239

237240
@shadow_color.setter
238-
def shadow_color(self, value: Optional[str]):
239-
self._set_attr("shadowColor", value)
241+
def shadow_color(self, value: Optional[ColorValue]):
242+
self.__shadow_color = value
243+
self._set_enum_attr("shadowColor", value, ColorEnums)
240244

241245
# surface_tint_color
242246
@property
243-
def surface_tint_color(self) -> Optional[str]:
244-
return self._get_attr("surfaceTintColor")
247+
def surface_tint_color(self) -> Optional[ColorValue]:
248+
return self.__surface_tint_color
245249

246250
@surface_tint_color.setter
247-
def surface_tint_color(self, value: Optional[str]):
248-
self._set_attr("surfaceTintColor", value)
251+
def surface_tint_color(self, value: Optional[ColorValue]):
252+
self.__surface_tint_color = value
253+
self._set_enum_attr("surfaceTintColor", value, ColorEnums)
249254

250255
# divider_color
251256
@property
252-
def divider_color(self) -> Optional[str]:
253-
return self._get_attr("dividerColor")
257+
def divider_color(self) -> Optional[ColorValue]:
258+
return self.__divider_color
254259

255260
@divider_color.setter
256-
def divider_color(self, value: Optional[str]):
257-
self._set_attr("dividerColor", value)
261+
def divider_color(self, value: Optional[ColorValue]):
262+
self.__divider_color = value
263+
self._set_enum_attr("dividerColor", value, ColorEnums)
258264

259265
# elevation
260266
@property

sdk/python/packages/flet-core/src/flet_core/border.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from enum import Enum
33
from typing import Optional, Union
44

5-
from flet_core.types import OptionalNumber
5+
from flet_core.types import ColorValue, OptionalNumber
66

77

88
class BorderSideStrokeAlign(Enum):
@@ -14,7 +14,7 @@ class BorderSideStrokeAlign(Enum):
1414
@dataclass
1515
class BorderSide:
1616
width: OptionalNumber
17-
color: Optional[str] = field(default=None)
17+
color: Optional[ColorValue] = field(default=None)
1818
stroke_align: Union[BorderSideStrokeAlign, OptionalNumber] = field(default=None)
1919

2020

@@ -26,7 +26,7 @@ class Border:
2626
left: Optional[BorderSide] = field(default=None)
2727

2828

29-
def all(width: Optional[float] = None, color: Optional[str] = None) -> Border:
29+
def all(width: Optional[float] = None, color: Optional[ColorValue] = None) -> Border:
3030
bs = BorderSide(width, color)
3131
return Border(left=bs, top=bs, right=bs, bottom=bs)
3232

0 commit comments

Comments
 (0)