From 0ab39c327852967b9c3dc4dde85900b78e08b5cd Mon Sep 17 00:00:00 2001 From: Ahmed Elsayed Date: Mon, 24 Mar 2025 09:00:30 +0200 Subject: [PATCH] Prefer using non nullable opacityAnimation property (#164795) `opacityAnimation` of `DropdownMenuItemButton` is always set with a non-nullable value. Therefore, I think it's a good idea to use `late CurvedAnimation` instead of `CurvedAnimation?` and avoid the unnecessary null assertion operator (!) ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --- packages/flutter/lib/src/material/dropdown.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/flutter/lib/src/material/dropdown.dart b/packages/flutter/lib/src/material/dropdown.dart index f9387e686e..a75e7c3dcd 100644 --- a/packages/flutter/lib/src/material/dropdown.dart +++ b/packages/flutter/lib/src/material/dropdown.dart @@ -131,7 +131,7 @@ class _DropdownMenuItemButton extends StatefulWidget { } class _DropdownMenuItemButtonState extends State<_DropdownMenuItemButton> { - CurvedAnimation? _opacityAnimation; + late CurvedAnimation _opacityAnimation; @override void initState() { @@ -146,12 +146,12 @@ class _DropdownMenuItemButtonState extends State<_DropdownMenuItemButton> oldWidget.route.animation != widget.route.animation || oldWidget.route.selectedIndex != widget.route.selectedIndex || widget.route.items.length != oldWidget.route.items.length) { + _opacityAnimation.dispose(); _setOpacityAnimation(); } } void _setOpacityAnimation() { - _opacityAnimation?.dispose(); final double unit = 0.5 / (widget.route.items.length + 1.5); if (widget.itemIndex == widget.route.selectedIndex) { _opacityAnimation = CurvedAnimation( @@ -205,7 +205,7 @@ class _DropdownMenuItemButtonState extends State<_DropdownMenuItemButton> @override void dispose() { - _opacityAnimation?.dispose(); + _opacityAnimation.dispose(); super.dispose(); } @@ -227,7 +227,7 @@ class _DropdownMenuItemButtonState extends State<_DropdownMenuItemButton> child: child, ); } - child = FadeTransition(opacity: _opacityAnimation!, child: child); + child = FadeTransition(opacity: _opacityAnimation, child: child); if (kIsWeb && dropdownMenuItem.enabled) { child = Shortcuts(shortcuts: _webShortcuts, child: child); }