check for negative offset

This commit is contained in:
Vadim 2025-08-29 09:59:25 +02:00
parent 49d0a2175f
commit a8fe9060f6

View file

@ -29,8 +29,6 @@ class AnimatedDialog extends StatefulWidget {
} }
class AnimatedDialogState extends State<AnimatedDialog> with SingleTickerProviderStateMixin { class AnimatedDialogState extends State<AnimatedDialog> with SingleTickerProviderStateMixin {
final GlobalKey _key = GlobalKey();
late Size _closedSize; late Size _closedSize;
late Offset _closedOffset; late Offset _closedOffset;
@ -129,7 +127,6 @@ class AnimatedDialogState extends State<AnimatedDialog> with SingleTickerProvide
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return GestureDetector(
key: _key,
onTap: _openDialog, onTap: _openDialog,
child: Opacity( child: Opacity(
opacity: _isDialogShown ? 0 : 1, opacity: _isDialogShown ? 0 : 1,
@ -140,13 +137,13 @@ class AnimatedDialogState extends State<AnimatedDialog> with SingleTickerProvide
void _setClosedOffset() { void _setClosedOffset() {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
final renderBox = _key.currentContext?.findRenderObject()! as RenderBox?; final renderBox = context.findRenderObject()! as RenderBox?;
if (renderBox != null) { if (renderBox != null) {
final size = MediaQuery.sizeOf(context); final size = MediaQuery.sizeOf(context);
final padding = MediaQuery.paddingOf(context); final padding = MediaQuery.paddingOf(context);
final maxWidth = size.width - padding.horizontal - Dimens.dialogMargin.horizontal; final maxWidth = size.width - padding.horizontal - Dimens.dialogMargin.horizontal;
final maxHeight = size.height - padding.vertical - Dimens.dialogMargin.vertical; final maxHeight = size.height - padding.vertical - Dimens.dialogMargin.vertical;
_closedSize = _key.currentContext!.size!; _closedSize = context.size!;
_sizeTween = SizeTween( _sizeTween = SizeTween(
begin: _closedSize, begin: _closedSize,
end: Size( end: Size(
@ -156,7 +153,12 @@ class AnimatedDialogState extends State<AnimatedDialog> with SingleTickerProvide
); );
_sizeAnimation = _sizeTween.animate(_defaultCurvedAnimation); _sizeAnimation = _sizeTween.animate(_defaultCurvedAnimation);
_closedOffset = renderBox.localToGlobal(Offset.zero); final globalOffset = renderBox.localToGlobal(Offset.zero);
_closedOffset = Offset(
//TODO: when updating layout or changing one of selected picker values, X offset is negative for some reason
globalOffset.dx > 0 ? globalOffset.dx : _closedOffset.dx,
globalOffset.dy,
);
_offsetAnimation = SizeTween( _offsetAnimation = SizeTween(
begin: Size( begin: Size(
_closedOffset.dx + _closedSize.width / 2, _closedOffset.dx + _closedSize.width / 2,