diff --git a/packages/dropdown_button2/CHANGELOG.md b/packages/dropdown_button2/CHANGELOG.md index a3c829f..d60c8f4 100644 --- a/packages/dropdown_button2/CHANGELOG.md +++ b/packages/dropdown_button2/CHANGELOG.md @@ -4,6 +4,7 @@ - DropdownRoutePage should dispose the created ScrollController [Flutter core]. - Remove 'must be non-null' and 'must not be null' comments [Flutter core]. - Form fields onChange callback should be called on reset [Flutter core]. +- Implement switch expressions. ## 3.0.0-beta.21 diff --git a/packages/dropdown_button2/lib/src/dropdown_button2.dart b/packages/dropdown_button2/lib/src/dropdown_button2.dart index 76a2c8f..2722e00 100644 --- a/packages/dropdown_button2/lib/src/dropdown_button2.dart +++ b/packages/dropdown_button2/lib/src/dropdown_button2.dart @@ -623,28 +623,19 @@ class _DropdownButton2State extends State> Color get _iconColor { // These colors are not defined in the Material Design spec. + final Brightness brightness = Theme.of(context).brightness; if (_enabled) { - if (_iconStyle.iconEnabledColor != null) { - return _iconStyle.iconEnabledColor!; - } - - switch (Theme.of(context).brightness) { - case Brightness.light: - return Colors.grey.shade700; - case Brightness.dark: - return Colors.white70; - } + return _iconStyle.iconEnabledColor ?? + switch (brightness) { + Brightness.light => Colors.grey.shade700, + Brightness.dark => Colors.white70, + }; } else { - if (_iconStyle.iconDisabledColor != null) { - return _iconStyle.iconDisabledColor!; - } - - switch (Theme.of(context).brightness) { - case Brightness.light: - return Colors.grey.shade400; - case Brightness.dark: - return Colors.white10; - } + return _iconStyle.iconDisabledColor ?? + switch (brightness) { + Brightness.light => Colors.grey.shade400, + Brightness.dark => Colors.white10, + }; } } diff --git a/packages/dropdown_button2/lib/src/dropdown_menu_item.dart b/packages/dropdown_button2/lib/src/dropdown_menu_item.dart index b1e999f..227e7ce 100644 --- a/packages/dropdown_button2/lib/src/dropdown_menu_item.dart +++ b/packages/dropdown_button2/lib/src/dropdown_menu_item.dart @@ -148,15 +148,11 @@ class _DropdownItemButton extends StatefulWidget { class _DropdownItemButtonState extends State<_DropdownItemButton> { void _handleFocusChange(bool focused) { - final bool inTraditionalMode; - switch (FocusManager.instance.highlightMode) { - case FocusHighlightMode.touch: - inTraditionalMode = false; - break; - case FocusHighlightMode.traditional: - inTraditionalMode = true; - break; - } + final bool inTraditionalMode = + switch (FocusManager.instance.highlightMode) { + FocusHighlightMode.touch => false, + FocusHighlightMode.traditional => true, + }; if (focused && inTraditionalMode) { final _MenuLimits menuLimits = widget.route.getMenuLimits( diff --git a/packages/dropdown_button2/lib/src/dropdown_route.dart b/packages/dropdown_button2/lib/src/dropdown_route.dart index 6286818..38f574c 100644 --- a/packages/dropdown_button2/lib/src/dropdown_route.dart +++ b/packages/dropdown_button2/lib/src/dropdown_route.dart @@ -401,49 +401,35 @@ class _DropdownMenuRouteLayout extends SingleChildLayoutDelegate { assert(textDirection != null); final Offset offset = route.dropdownStyle.offset; - final double left; - - switch (route.dropdownStyle.direction) { - case DropdownDirection.textDirection: - switch (textDirection!) { - case TextDirection.rtl: - left = clampDouble( + final double left = switch (route.dropdownStyle.direction) { + DropdownDirection.textDirection => switch (textDirection!) { + TextDirection.rtl => clampDouble( buttonRect.right - childSize.width + offset.dx, 0.0, size.width - childSize.width, - ); - break; - case TextDirection.ltr: - left = clampDouble( + ), + TextDirection.ltr => clampDouble( buttonRect.left + offset.dx, 0.0, size.width - childSize.width, - ); - break; - } - break; - case DropdownDirection.right: - left = clampDouble( + ), + }, + DropdownDirection.right => clampDouble( buttonRect.left + offset.dx, 0.0, size.width - childSize.width, - ); - break; - case DropdownDirection.left: - left = clampDouble( + ), + DropdownDirection.left => clampDouble( buttonRect.right - childSize.width + offset.dx, 0.0, size.width - childSize.width, - ); - break; - case DropdownDirection.center: - left = clampDouble( + ), + DropdownDirection.center => clampDouble( (size.width - childSize.width) / 2 + offset.dx, 0.0, size.width - childSize.width, - ); - break; - } + ), + }; return Offset(left, menuLimits.top); }