如何为位置因布局变化而变化的 Flutter 小部件制作动画

How to animate a Flutter widget whose position changes due to layout changes

我问的问题与 相同,只是在他们的情况下,他们能够使用此处不适用的 Hero 动画解决问题。我遇到的情况是,当用户聚焦搜索字段时,键盘会出现并将内容向上移动。我希望能够向上动画该内容,以便它不会跳跃(并在键盘关闭时也为其动画动画),但位置完全取决于布局,这意味着我不知道最终位置是什么将是为了使用类似 SlideTransition 的东西。

附上我目前情况的截图。居中的放大镜图标和文本是我想要制作动画的小部件组。

只需将 Scaffold 中的 属性 resizeToAvoidBottomInset 设置为 false

似乎解决方案取决于几件事 - 一个是我必须将 Scaffold 小部件上的 resetToAvoidBottomInset 属性 设置为 false,但另外我不得不使用一个 AnimatedPadding 小部件,该小部件将填充应用到居中内容的底部,该填充等于 MediaQuery.of(context).viewInsets.bottom 值,该值占键盘占用的 space 。这当然有效,但感觉很奇怪,因为我依赖于对小部件外部发生的事情的了解来提供动画。

这是相关代码的示例:

Expanded(
              child: Container(
                color: Colors.white,
                child: AnimatedPadding(
                  padding: EdgeInsets.only(
                      bottom: MediaQuery.of(context).viewInsets.bottom),
                  duration: const Duration(milliseconds: 600),
                  curve: Curves.easeInOut,
                  child: Center(