From d0b094c21c8790b95441b314f21d90739f3bcb5d Mon Sep 17 00:00:00 2001 From: Feodor Fitsner Date: Fri, 25 Nov 2022 09:22:27 -0800 Subject: [PATCH] Added `Dropdown.alignment` property --- package/lib/src/controls/dropdown.dart | 32 +++++++++++++++++--------- sdk/python/flet/__init__.py | 1 + sdk/python/flet/dropdown.py | 17 ++++++++++++++ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/package/lib/src/controls/dropdown.dart b/package/lib/src/controls/dropdown.dart index d3bd2c7dc..a6e19d5b2 100644 --- a/package/lib/src/controls/dropdown.dart +++ b/package/lib/src/controls/dropdown.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'; @@ -93,19 +94,26 @@ class _DropdownControlState extends State { Theme.of(context).colorScheme.onSurface); } + var alignment = parseAlignment(widget.control, "alignment"); + var items = itemsView.children .where((c) => c.name == null) - .map>( - (Control itemCtrl) => DropdownMenuItem( - enabled: !(disabled || itemCtrl.isDisabled), - value: itemCtrl.attrs["key"] ?? - itemCtrl.attrs["text"] ?? - itemCtrl.id, - child: Text(itemCtrl.attrs["text"] ?? - itemCtrl.attrs["key"] ?? - itemCtrl.id), - )) - .toList(); + .map>((Control itemCtrl) { + Widget itemChild = Text( + itemCtrl.attrs["text"] ?? itemCtrl.attrs["key"] ?? itemCtrl.id, + ); + + if (alignment != null) { + itemChild = Container(alignment: alignment, child: itemChild); + } + return DropdownMenuItem( + enabled: !(disabled || itemCtrl.isDisabled), + value: itemCtrl.attrs["key"] ?? + itemCtrl.attrs["text"] ?? + itemCtrl.id, + child: itemChild, + ); + }).toList(); String? value = widget.control.attrString("value"); if (_value != value) { @@ -139,6 +147,8 @@ class _DropdownControlState extends State { focusNode: _focusNode, value: _value, borderRadius: borderRadius, + alignment: alignment ?? AlignmentDirectional.centerStart, + isExpanded: alignment != null, decoration: buildInputDecoration( context, widget.control, diff --git a/sdk/python/flet/__init__.py b/sdk/python/flet/__init__.py index e56608259..d512a5e6b 100644 --- a/sdk/python/flet/__init__.py +++ b/sdk/python/flet/__init__.py @@ -5,6 +5,7 @@ border, border_radius, colors, + dropdown, icons, margin, padding, diff --git a/sdk/python/flet/dropdown.py b/sdk/python/flet/dropdown.py index bfffe7bd4..600f04c52 100644 --- a/sdk/python/flet/dropdown.py +++ b/sdk/python/flet/dropdown.py @@ -2,6 +2,7 @@ from beartype import beartype +from flet.alignment import Alignment from flet.control import Control, OptionalNumber from flet.focus import FocusData from flet.form_field_control import FormFieldControl, InputBorder @@ -84,6 +85,7 @@ def __init__( value: Optional[str] = None, autofocus: Optional[bool] = None, options=None, + alignment: Optional[Alignment] = None, on_change=None, on_focus=None, on_blur=None, @@ -153,6 +155,7 @@ def __init__( self.value = value self.autofocus = autofocus self.options = options + self.alignment = alignment self.on_focus = on_focus self.on_blur = on_blur self.on_change = on_change @@ -160,6 +163,10 @@ def __init__( def _get_control_name(self): return "dropdown" + def _before_build_command(self): + super()._before_build_command() + self._set_attr_json("alignment", self.__alignment) + def _get_children(self): result = FormFieldControl._get_children(self) result.extend(self.__options) @@ -197,6 +204,16 @@ def autofocus(self) -> Optional[bool]: def autofocus(self, value: Optional[bool]): self._set_attr("autofocus", value) + # alignment + @property + def alignment(self) -> Optional[Alignment]: + return self.__alignment + + @alignment.setter + @beartype + def alignment(self, value: Optional[Alignment]): + self.__alignment = value + # on_change @property def on_change(self):