Flutter 颤振变换。将动画从窗口小部件的中心平移到窗口小部件的中心

Flutter 颤振变换。将动画从窗口小部件的中心平移到窗口小部件的中心,flutter,flutter-animation,Flutter,Flutter Animation,在下面的动画中,实现了将中心转换为使用elasticIn和elasticOut 不幸的是,我的实现不是小部件的中心,我无法设置它 import 'package:flutter/material.dart'; void main()=>runApp(MaterialApp(home: App(),)); class App extends StatefulWidget { @override State<StatefulWidget> createState() =

在下面的动画中,实现了将中心转换为使用
elasticIn
elasticOut

不幸的是,我的实现不是小部件的中心,我无法设置它

import 'package:flutter/material.dart';

void main()=>runApp(MaterialApp(home: App(),));

class App extends StatefulWidget {
  @override
  State<StatefulWidget> createState() =>_App();
}

class _App extends State<App> with TickerProviderStateMixin {
  AnimationController controller;
  Animation<double> animationRadiusIn;
  Animation<double> animationRadiusOut;

  final double initialRadius = 55.0;
  double radius = 0.0;

  @override
  void initState() {
    super.initState();

    controller = AnimationController(vsync: this, duration: Duration(seconds: 5));

    animationRadiusIn =
        Tween<double>(begin: 1.0, end: 0.5).animate(CurvedAnimation(parent: controller, curve: Interval(0.75, 1.0, curve: Curves.elasticIn)));
    animationRadiusOut =
        Tween<double>(begin: 0.5, end: 1.0).animate(CurvedAnimation(parent: controller, curve: Interval(0.0, 0.25, curve: Curves.elasticOut)));

    controller.addListener(() {
      setState(() {
        if (controller.value >= 0.75 && controller.value <= 1.0) {
          radius = animationRadiusIn.value * initialRadius;
        } else if (controller.value >= 0.0 && controller.value <= 0.25) {
          radius = animationRadiusOut.value * initialRadius;
        }
      });
    });

    controller.repeat();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          Center(
            child: Transform.translate(
              offset: Offset(radius,radius),
              child:FlutterLogo(),
            ),
          ),
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MaterialApp(home:App(),);
类应用程序扩展StatefulWidget{
@凌驾
State createState()=>_App();
}
类应用程序使用TickerProviderStateMixin扩展状态{
动画控制器;
动画辐射;
动画半径输出;
最终双初始半径=55.0;
双半径=0.0;
@凌驾
void initState(){
super.initState();
controller=AnimationController(vsync:this,duration:duration(秒:5));
放射性核素=
Tween(开始:1.0,结束:0.5)。动画(曲线动画(父对象:控制器,曲线:间隔(0.75,1.0,曲线:Curves.elasticIn));
动画半径输出=
Tween(开始:0.5,结束:1.0)。动画(曲线动画(父对象:控制器,曲线:间隔(0.0,0.25,曲线:Curves.elasticOut));
controller.addListener(){
设置状态(){

如果(controller.value>=0.75&&controller.value=0.0&&controller.value,为什么不使用
AlignTransition
/
SlideTransition
?参见和@pskink,这意味着开始和结束
曲线。elasticIn
曲线。elasticOut
从中心到中心的动画,为什么不使用
AlignTransition
//code>SlideTransition
?参见和@pskink,表示开始和结束
曲线。elasticIn
曲线。elasticOut
从中心到中心的动画