Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expose more properties in Controls #4105

Merged
merged 31 commits into from
Oct 29, 2024
Merged
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
aa03e37
nav bar/drawer/rail
ndonkoHenri Sep 22, 2024
69e63ce
TooltipDirection enum has wrong values
ndonkoHenri Sep 22, 2024
f26c80f
Text and TextSpan
ndonkoHenri Sep 23, 2024
30f4721
GestureDetector
ndonkoHenri Sep 23, 2024
d370c00
deprecate MapPointerDeviceType in favor of PointerDeviceType
ndonkoHenri Sep 23, 2024
7874d9e
create BoxConstraints dataclass
ndonkoHenri Sep 22, 2024
e99fe89
update utils
ndonkoHenri Sep 24, 2024
7901af7
fix navbar appearance when disabled
ndonkoHenri Sep 24, 2024
ca7aee8
PopupMenu new props
ndonkoHenri Sep 24, 2024
84daa44
move AnimationValue from types.py to animation.py
ndonkoHenri Sep 24, 2024
f31c377
update
ndonkoHenri Sep 30, 2024
bd12d20
Tab: icon_content, height, icon_margin
ndonkoHenri Oct 4, 2024
c8c587e
New props: TextField, Dropdown, CupertinoTextField
ndonkoHenri Oct 5, 2024
de5e4cb
FormField: make suffix_icon and prefix_icon support both string and C…
ndonkoHenri Oct 5, 2024
bb283a4
refactor ControlState props
ndonkoHenri Oct 5, 2024
36ab786
properly disable navbar
ndonkoHenri Oct 5, 2024
a65be58
fix failing CI: NoneType is not available in py3.8
ndonkoHenri Oct 5, 2024
d8ffc0d
fix failing CI: update expected test value
ndonkoHenri Oct 5, 2024
a4ccf64
fix failing CI: import ControlState
ndonkoHenri Oct 5, 2024
810126c
FormField: add `collapsed` prop which fits field's content (#4106)
ndonkoHenri Oct 6, 2024
f2d94b9
remove _set_control_state_attr_json; add wrap_attr_dict boolean prop …
ndonkoHenri Oct 10, 2024
26ef254
FormField: fit_parent_size prop
ndonkoHenri Oct 10, 2024
fb71143
Define __post_init__ method for Dataclasses making use of ControlState
ndonkoHenri Oct 11, 2024
2d673ed
Merge branch 'main' into new-props
ndonkoHenri Oct 18, 2024
e3cf7e8
merge 'main' branch
ndonkoHenri Oct 19, 2024
a28398f
remove Optional in AnimationValue
ndonkoHenri Oct 25, 2024
ce8fdee
Merge 'main' branch
ndonkoHenri Oct 25, 2024
83042c7
`FormField.label` as a Control
ndonkoHenri Oct 26, 2024
612c8ae
Merge branch 'main' into new-props
FeodorFitsner Oct 29, 2024
0a3afdd
Fix wrapping ListTile to Material widget
FeodorFitsner Oct 29, 2024
a44bcde
Merge branch 'main' into new-props
FeodorFitsner Oct 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
PopupMenu new props
ndonkoHenri committed Sep 24, 2024
commit ca7aee89d34be62c6f671f55f1f185c2635ca842
14 changes: 12 additions & 2 deletions packages/flet/lib/src/controls/popup_menu_button.dart
Original file line number Diff line number Diff line change
@@ -2,7 +2,10 @@ import 'package:flutter/material.dart';

import '../flet_control_backend.dart';
import '../models/control.dart';
import '../utils/animations.dart';
import '../utils/borders.dart';
import '../utils/box.dart';
import '../utils/buttons.dart';
import '../utils/edge_insets.dart';
import '../utils/icons.dart';
import '../utils/mouse.dart';
@@ -75,6 +78,14 @@ class PopupMenuButtonControl extends StatelessWidget with FletStoreMixin {
color: bgcolor,
clipBehavior: clipBehavior,
shape: shape,
constraints: parseBoxConstraints(control, "sizeConstraints"),
style: parseButtonStyle(Theme.of(context), control, "style"),
popUpAnimationStyle:
parseAnimationStyle(control, "popupAnimationStyle"),
menuPadding: parseEdgeInsets(control, "menuPadding"),
onSelected: (String selection) {
backend.triggerControlEvent(control.id, "select", selection);
},
onCanceled: () {
backend.triggerControlEvent(control.id, "cancel");
backend.triggerControlEvent(control.id, "cancelled"); // DEPRECATED
@@ -147,8 +158,7 @@ class PopupMenuButtonControl extends StatelessWidget with FletStoreMixin {
return constrainedControl(
context,
TooltipVisibility(
visible: control.attrString("tooltip") == null,
child: popupButton),
visible: control.attrString("tooltip") == null, child: popupButton),
parent,
control);
}
68 changes: 64 additions & 4 deletions sdk/python/packages/flet-core/src/flet_core/popup_menu_button.py
Original file line number Diff line number Diff line change
@@ -2,7 +2,9 @@
from enum import Enum
from typing import Any, List, Optional, Union

from flet_core.buttons import OutlinedBorder
from flet_core.animation import AnimationStyle
from flet_core.box import BoxConstraints
from flet_core.buttons import OutlinedBorder, ButtonStyle
from flet_core.constrained_control import ConstrainedControl
from flet_core.control import Control, OptionalNumber
from flet_core.ref import Ref
@@ -197,9 +199,14 @@ def __init__(
enable_feedback: Optional[bool] = None,
shape: Optional[OutlinedBorder] = None,
padding: PaddingValue = None,
menu_padding: PaddingValue = None,
style: Optional[ButtonStyle] = None,
popup_animation_style: Optional[AnimationStyle] = None,
size_constraints: Optional[BoxConstraints] = None,
on_cancelled: OptionalControlEventCallable = None,
on_open: OptionalControlEventCallable = None,
on_cancel: OptionalControlEventCallable = None,
on_select: OptionalControlEventCallable = None,
#
# ConstrainedControl
#
@@ -269,6 +276,7 @@ def __init__(
self.on_open = on_open
self.shape = shape
self.padding = padding
self.menu_padding = menu_padding
self.clip_behavior = clip_behavior
self.bgcolor = bgcolor
self.icon_color = icon_color
@@ -278,9 +286,12 @@ def __init__(
self.icon_size = icon_size
self.elevation = elevation
self.enable_feedback = enable_feedback
self.__content: Optional[Control] = None
self.content = content
self.menu_position = menu_position
self.style = style
self.popup_animation_style = popup_animation_style
self.size_constraints = size_constraints
self.on_select = on_select

def _get_control_name(self):
return "popupmenubutton"
@@ -296,6 +307,10 @@ def before_update(self):
super().before_update()
self._set_attr_json("shape", self.__shape)
self._set_attr_json("padding", self.__padding)
self._set_attr_json("menuPadding", self.__menu_padding)
self._set_attr_json("style", self.__style)
self._set_attr_json("popupAnimationStyle", self.__popup_animation_style)
self._set_attr_json("sizeConstraints", self.__size_constraints)

# items
@property
@@ -315,6 +330,24 @@ def shape(self) -> Optional[OutlinedBorder]:
def shape(self, value: Optional[OutlinedBorder]):
self.__shape = value

# size_constraints
@property
def size_constraints(self) -> Optional[BoxConstraints]:
return self.__size_constraints

@size_constraints.setter
def size_constraints(self, value: Optional[BoxConstraints]):
self.__size_constraints = value

# menu_padding
@property
def menu_padding(self) -> PaddingValue:
return self.__menu_padding

@menu_padding.setter
def menu_padding(self, value: PaddingValue):
self.__menu_padding = value

# padding
@property
def padding(self) -> PaddingValue:
@@ -414,13 +447,31 @@ def content(self) -> Optional[Control]:
def content(self, value: Optional[Control]):
self.__content = value

# style
@property
def style(self) -> Optional[ButtonStyle]:
return self.__style

@style.setter
def style(self, value: Optional[ButtonStyle]):
self.__style = value

# popup_animation_style
@property
def popup_animation_style(self) -> Optional[AnimationStyle]:
return self.__popup_animation_style

@popup_animation_style.setter
def popup_animation_style(self, value: Optional[AnimationStyle]):
self.__popup_animation_style = value

# menu_position
@property
def menu_position(self) -> PopupMenuPosition:
def menu_position(self) -> Optional[PopupMenuPosition]:
return self.__menu_position

@menu_position.setter
def menu_position(self, value: PopupMenuPosition):
def menu_position(self, value: Optional[PopupMenuPosition]):
self.__menu_position = value
self._set_enum_attr("menuPosition", value, PopupMenuPosition)

@@ -473,3 +524,12 @@ def on_open(self) -> OptionalControlEventCallable:
@on_open.setter
def on_open(self, handler: OptionalControlEventCallable):
self._add_event_handler("open", handler)

# on_select
@property
def on_select(self) -> OptionalControlEventCallable:
return self._get_event_handler("select")

@on_select.setter
def on_select(self, handler: OptionalControlEventCallable):
self._add_event_handler("select", handler)