diff --git a/lib/screens/metering/components/shared/readings_container/components/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart b/lib/screens/metering/components/shared/readings_container/components/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart index cea97da..72e770b 100644 --- a/lib/screens/metering/components/shared/readings_container/components/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart +++ b/lib/screens/metering/components/shared/readings_container/components/animated_dialog_picker/components/animated_dialog/widget_dialog_animated.dart @@ -22,15 +22,15 @@ class AnimatedDialog extends StatefulWidget { class AnimatedDialogState extends State with SingleTickerProviderStateMixin { final GlobalKey _key = GlobalKey(); - late final Size _closedSize; - late final Offset _closedOffset; + late Size _closedSize; + late Offset _closedOffset; late final AnimationController _animationController; late final CurvedAnimation _defaultCurvedAnimation; late final Animation _barrierColorAnimation; - late final SizeTween _sizeTween; - late final Animation _sizeAnimation; - late final Animation _offsetAnimation; + late SizeTween _sizeTween; + late Animation _sizeAnimation; + late Animation _offsetAnimation; late final Animation _borderRadiusAnimation; late final Animation _closedOpacityAnimation; late final Animation _openedOpacityAnimation; @@ -88,35 +88,7 @@ class AnimatedDialogState extends State with SingleTickerProvide ), ); - WidgetsBinding.instance.addPostFrameCallback((_) { - final mediaQuery = MediaQuery.of(context); - - _closedSize = _key.currentContext!.size!; - _sizeTween = SizeTween( - begin: _closedSize, - end: widget.openedSize ?? - Size( - mediaQuery.size.width - - mediaQuery.padding.horizontal - - Dimens.dialogMargin.horizontal, - mediaQuery.size.height - mediaQuery.padding.vertical - Dimens.dialogMargin.vertical, - ), - ); - _sizeAnimation = _sizeTween.animate(_defaultCurvedAnimation); - - final renderBox = _key.currentContext!.findRenderObject()! as RenderBox; - _closedOffset = renderBox.localToGlobal(Offset.zero); - _offsetAnimation = SizeTween( - begin: Size( - _closedOffset.dx + _closedSize.width / 2, - _closedOffset.dy + _closedSize.height / 2, - ), - end: Size( - mediaQuery.size.width / 2, - mediaQuery.size.height / 2 + mediaQuery.padding.top / 2 - mediaQuery.padding.bottom / 2, - ), - ).animate(_defaultCurvedAnimation); - }); + _setClosedOffset(); } @override @@ -133,6 +105,12 @@ class AnimatedDialogState extends State with SingleTickerProvide ).animate(_defaultCurvedAnimation); } + @override + void didUpdateWidget(covariant AnimatedDialog oldWidget) { + super.didUpdateWidget(oldWidget); + _setClosedOffset(); + } + @override void dispose() { _animationController.dispose(); @@ -151,6 +129,38 @@ class AnimatedDialogState extends State with SingleTickerProvide ); } + void _setClosedOffset() { + WidgetsBinding.instance.addPostFrameCallback((_) { + final renderBox = _key.currentContext?.findRenderObject()! as RenderBox?; + if (renderBox != null) { + final size = MediaQuery.sizeOf(context); + final padding = MediaQuery.paddingOf(context); + _closedSize = _key.currentContext!.size!; + _sizeTween = SizeTween( + begin: _closedSize, + end: widget.openedSize ?? + Size( + size.width - padding.horizontal - Dimens.dialogMargin.horizontal, + size.height - padding.vertical - Dimens.dialogMargin.vertical, + ), + ); + _sizeAnimation = _sizeTween.animate(_defaultCurvedAnimation); + + _closedOffset = renderBox.localToGlobal(Offset.zero); + _offsetAnimation = SizeTween( + begin: Size( + _closedOffset.dx + _closedSize.width / 2, + _closedOffset.dy + _closedSize.height / 2, + ), + end: Size( + size.width / 2, + size.height / 2 + padding.top / 2 - padding.bottom / 2, + ), + ).animate(_defaultCurvedAnimation); + } + }); + } + void _openDialog() { Navigator.of(context).push( PageRouteBuilder(