From 8a07c5f7d00040f3d882d2881c3e899428a406d3 Mon Sep 17 00:00:00 2001 From: InesaFitsner Date: Thu, 7 Dec 2023 09:13:36 -0800 Subject: [PATCH 1/5] tab_alignment initial commit --- package/lib/src/controls/tabs.dart | 5 ++++ package/lib/src/utils/alignment.dart | 12 +++++++++- .../flet-core/src/flet_core/__init__.py | 1 + .../packages/flet-core/src/flet_core/tabs.py | 23 +++++++++++++++++++ .../packages/flet-core/src/flet_core/types.py | 8 +++++++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/package/lib/src/controls/tabs.dart b/package/lib/src/controls/tabs.dart index b123025e9..c16b0c40c 100644 --- a/package/lib/src/controls/tabs.dart +++ b/package/lib/src/controls/tabs.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:flet/src/utils/alignment.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -136,7 +137,11 @@ class _TabsControlState extends State var indicatorTabSize = widget.control.attrBool("indicatorTabSize"); + var tabAlignment = parseTabAlignment( + widget.control, "tabAlignment", TabAlignment.start); + var tabBar = TabBar( + tabAlignment: tabAlignment, controller: _tabController, isScrollable: widget.control.attrBool("scrollable", true)!, dividerColor: diff --git a/package/lib/src/utils/alignment.dart b/package/lib/src/utils/alignment.dart index 07efbbba8..5198523f6 100644 --- a/package/lib/src/utils/alignment.dart +++ b/package/lib/src/utils/alignment.dart @@ -1,6 +1,7 @@ import 'dart:convert'; -import 'package:flutter/widgets.dart'; +import 'package:flutter/material.dart'; +//import 'package:flutter/widgets.dart'; import '../models/control.dart'; import 'numbers.dart'; @@ -23,6 +24,15 @@ CrossAxisAlignment parseCrossAxisAlignment( orElse: () => defValue); } +TabAlignment parseTabAlignment( + Control control, String propName, TabAlignment defValue) { + return TabAlignment.values.firstWhere( + (e) => + e.name.toLowerCase() == + control.attrString(propName, "")!.toLowerCase(), + orElse: () => defValue); +} + WrapAlignment parseWrapAlignment( Control control, String propName, WrapAlignment defValue) { return WrapAlignment.values.firstWhere( diff --git a/sdk/python/packages/flet-core/src/flet_core/__init__.py b/sdk/python/packages/flet-core/src/flet_core/__init__.py index 7f03f73d2..c8c76fd31 100644 --- a/sdk/python/packages/flet-core/src/flet_core/__init__.py +++ b/sdk/python/packages/flet-core/src/flet_core/__init__.py @@ -214,6 +214,7 @@ PaddingValue, PageDesignLanguage, ScrollMode, + TabAlignment, TextAlign, ThemeMode, ) diff --git a/sdk/python/packages/flet-core/src/flet_core/tabs.py b/sdk/python/packages/flet-core/src/flet_core/tabs.py index ade61ffc1..d9c7ffc7f 100644 --- a/sdk/python/packages/flet-core/src/flet_core/tabs.py +++ b/sdk/python/packages/flet-core/src/flet_core/tabs.py @@ -14,6 +14,7 @@ ResponsiveNumber, RotateValue, ScaleValue, + TabAlignment, ) @@ -162,6 +163,7 @@ def __init__( tabs: Optional[List[Tab]] = None, selected_index: Optional[int] = None, scrollable: Optional[bool] = None, + tab_alignment: Optional[TabAlignment] = None, animation_duration: Optional[int] = None, divider_color: Optional[str] = None, indicator_color: Optional[str] = None, @@ -206,6 +208,7 @@ def __init__( self.tabs = tabs self.selected_index = selected_index self.scrollable = scrollable + self.tab_alignment = tab_alignment self.animation_duration = animation_duration self.divider_color = divider_color self.label_color = label_color @@ -227,6 +230,7 @@ def _before_build_command(self): self._set_attr_json("indicatorBorderRadius", self.__indicator_border_radius) self._set_attr_json("indicatorBorderSide", self.__indicator_border_side) self._set_attr_json("indicatorPadding", self.__indicator_padding) + # self._set_attr_json("tabAlignment", self.__tab_alignment) def _get_children(self): return self.__tabs @@ -267,6 +271,25 @@ def scrollable(self) -> Optional[bool]: def scrollable(self, value: Optional[bool]): self._set_attr("scrollable", value) + # tab_alignment + @property + def tab_alignment(self) -> Optional[TabAlignment]: + return self.__tab_alignment + + @tab_alignment.setter + def tab_alignment(self, value: Optional[TabAlignment]): + self.__tab_alignment = value + self._set_attr("tabAlignment", value.value if value is not None else None) + + # # tab_alignment + # @property + # def tab_alignment(self) -> Optional[TabAlignment]: + # return self.__tab_alignment + + # @tab_alignment.setter + # def tab_alignment(self, value: Optional[TabAlignment]): + # self.__tab_alignment = value + # animation_duration @property def animation_duration(self) -> Optional[int]: diff --git a/sdk/python/packages/flet-core/src/flet_core/types.py b/sdk/python/packages/flet-core/src/flet_core/types.py index 4defef634..6364a0761 100644 --- a/sdk/python/packages/flet-core/src/flet_core/types.py +++ b/sdk/python/packages/flet-core/src/flet_core/types.py @@ -139,6 +139,14 @@ class CrossAxisAlignment(Enum): BASELINE = "baseline" +class TabAlignment(Enum): + NONE = None + START = "start" + START_OFFSET = "startOffset" + FILL = "fill" + CENTER = "center" + + LabelPositionString = Literal[None, "right", "left"] From 529c753cd6800e35a6c97e7b05f06da51923cc23 Mon Sep 17 00:00:00 2001 From: InesaFitsner Date: Thu, 7 Dec 2023 09:19:08 -0800 Subject: [PATCH 2/5] default values for tab_alignment when scrollable True and False --- package/lib/src/controls/tabs.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package/lib/src/controls/tabs.dart b/package/lib/src/controls/tabs.dart index c16b0c40c..7f9d393eb 100644 --- a/package/lib/src/controls/tabs.dart +++ b/package/lib/src/controls/tabs.dart @@ -137,13 +137,15 @@ class _TabsControlState extends State var indicatorTabSize = widget.control.attrBool("indicatorTabSize"); - var tabAlignment = parseTabAlignment( - widget.control, "tabAlignment", TabAlignment.start); + var isScrollable = widget.control.attrBool("scrollable", true)!; + var tabAlignment = parseTabAlignment(widget.control, "tabAlignment", + isScrollable ? TabAlignment.start : TabAlignment.fill); var tabBar = TabBar( tabAlignment: tabAlignment, controller: _tabController, - isScrollable: widget.control.attrBool("scrollable", true)!, + //isScrollable: widget.control.attrBool("scrollable", true)!, + isScrollable: isScrollable, dividerColor: HexColor.fromString(Theme.of(context), widget.control.attrString("dividerColor", "")!) ?? TabBarTheme.of(context).dividerColor, From be7a06b4a6374b1acdd60cf1c6ac9c19beb5b480 Mon Sep 17 00:00:00 2001 From: InesaFitsner Date: Thu, 7 Dec 2023 09:25:18 -0800 Subject: [PATCH 3/5] removed commented code --- package/lib/src/controls/tabs.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/package/lib/src/controls/tabs.dart b/package/lib/src/controls/tabs.dart index 7f9d393eb..030f4580a 100644 --- a/package/lib/src/controls/tabs.dart +++ b/package/lib/src/controls/tabs.dart @@ -144,7 +144,6 @@ class _TabsControlState extends State var tabBar = TabBar( tabAlignment: tabAlignment, controller: _tabController, - //isScrollable: widget.control.attrBool("scrollable", true)!, isScrollable: isScrollable, dividerColor: HexColor.fromString(Theme.of(context), widget.control.attrString("dividerColor", "")!) ?? From cda38652eeefc00278e78b2124bb8bcc570865a6 Mon Sep 17 00:00:00 2001 From: InesaFitsner Date: Thu, 7 Dec 2023 09:26:37 -0800 Subject: [PATCH 4/5] clean up --- sdk/python/packages/flet-core/src/flet_core/tabs.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/sdk/python/packages/flet-core/src/flet_core/tabs.py b/sdk/python/packages/flet-core/src/flet_core/tabs.py index d9c7ffc7f..5149a88b3 100644 --- a/sdk/python/packages/flet-core/src/flet_core/tabs.py +++ b/sdk/python/packages/flet-core/src/flet_core/tabs.py @@ -230,7 +230,6 @@ def _before_build_command(self): self._set_attr_json("indicatorBorderRadius", self.__indicator_border_radius) self._set_attr_json("indicatorBorderSide", self.__indicator_border_side) self._set_attr_json("indicatorPadding", self.__indicator_padding) - # self._set_attr_json("tabAlignment", self.__tab_alignment) def _get_children(self): return self.__tabs @@ -281,15 +280,6 @@ def tab_alignment(self, value: Optional[TabAlignment]): self.__tab_alignment = value self._set_attr("tabAlignment", value.value if value is not None else None) - # # tab_alignment - # @property - # def tab_alignment(self) -> Optional[TabAlignment]: - # return self.__tab_alignment - - # @tab_alignment.setter - # def tab_alignment(self, value: Optional[TabAlignment]): - # self.__tab_alignment = value - # animation_duration @property def animation_duration(self) -> Optional[int]: From 492a37acd313831f816e1087c86b442ff3b9113b Mon Sep 17 00:00:00 2001 From: InesaFitsner Date: Thu, 7 Dec 2023 09:31:06 -0800 Subject: [PATCH 5/5] deleted comment --- package/lib/src/utils/alignment.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/package/lib/src/utils/alignment.dart b/package/lib/src/utils/alignment.dart index 5198523f6..457ce084e 100644 --- a/package/lib/src/utils/alignment.dart +++ b/package/lib/src/utils/alignment.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -//import 'package:flutter/widgets.dart'; import '../models/control.dart'; import 'numbers.dart';