Flutter:如何使用animatedTransition小部件上的MediaQuery值管理过渡

时间:2019-06-27 02:11:27

标签: flutter flutter-animation

首先,我对我的英语表示歉意。

第二,我在管理animateTransition的值时遇到麻烦。如您所见,我有一个卡片小部件,其位置在屏幕右侧,而MaterialButton在屏幕中心。

enter image description here

定位的窗口小部件的值由MediaQuery类给出,并保存在position变量中,但是当我尝试更改位置的值并调用setSate函数时,构建方法将重做并初始化变量,并且新值始终相同因此(我认为),因此永远不会看到过渡。

我显示代码。

class _DashboardState extends State<Dashboard> {
final double blur = 30;
final double offset = 20;
final double top = 25;

@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
double position = -(size.width) * 0.8;

return WillPopScope(
  onWillPop: () async =>
      SystemChannels.platform.invokeMethod('SystemNavigator.pop'),
  child: MaterialApp(
    home: Scaffold(
      body: SafeArea(
        child: Stack(
          alignment: Alignment.center,
          children: <Widget>[
            Positioned(
              right: position,
              child: AnimatedContainer(
                duration: Duration(milliseconds: 500),
                curve: Curves.decelerate,
                child: Card(
                  elevation: 8,
                  color: Colors.red,
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(10),
                  ),
                  child: Container(
                    width: size.width * 0.9,
                    height: size.height * 0.8,
                  ),
                ),
              ),
            ),
            Center(
              child: MaterialButton(
                color: Colors.black,
                child: Text("mover"),
                onPressed: () {
                  setState(() {
                    position = 0;
                  });
                },
              ),
            )
          ],
        ),
      ),
    ),
  ),
);

} }

当我尝试取出变量时,由于mediaQuery中的上下文相关性,并且我无法初始化请求变量以获取设备的大小并置于初始状态,所以我无法这样做。处理此类问题的任何建议。

感谢您的关注

0 个答案:

没有答案