Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 颤振动画_Animation_Flutter - Fatal编程技术网

Animation 颤振动画

Animation 颤振动画,animation,flutter,Animation,Flutter,一旦用户单击按钮,我如何淡出第一个小部件,并设置第二个小部件的动画,并替换第一个小部件 然后单击第二个按钮,使第二个小部件下降,第一个小部件淡入?您可以使用第一个小部件的动画功能和第二个小部件的动画定位功能来完成此操作。这里有一个例子: import 'package:flutter/material.dart'; class HomePage extends StatefulWidget { @override _HomePageState createState() => _

一旦用户单击按钮,我如何淡出第一个小部件,并设置第二个小部件的动画,并替换第一个小部件


然后单击第二个按钮,使第二个小部件下降,第一个小部件淡入?

您可以使用第一个小部件的动画功能和第二个小部件的动画定位功能来完成此操作。这里有一个例子:

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  double _firstWidgetOpacity = 1.0;
  double _secondWidgetBottomPosition = -200.0;

  animate() {
    setState(() {
      if (_firstWidgetOpacity == 1.0) {
        _firstWidgetOpacity = 0.0;
        _secondWidgetBottomPosition = MediaQuery.of(context).size.height / 2 - 140.0;
      } else {
        _firstWidgetOpacity = 1.0;
        _secondWidgetBottomPosition = -200.0;
      }
    });
  }

  @override
  void initState() {
    super.initState();
    print((560 / 60).floor());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: animate,
        label: Text('Animate'),
      ),
      body: Stack(
        children: <Widget>[
          Align(
            alignment: Alignment.center,
            child: AnimatedOpacity(
              duration: Duration(milliseconds: 350),
              opacity: _firstWidgetOpacity,
              curve: Curves.easeIn,
              child: Container(
                width: 200.0,
                height: 200.0,
                color: Colors.blue,
                child: Center(
                  child: Text('First widget'),
                ),
              ),
            ),
          ),
          AnimatedPositioned(
            duration: Duration(milliseconds: 350),
            curve: Curves.elasticIn,
            bottom: _secondWidgetBottomPosition,
            left: 0.0,
            right: 0.0,
            child: Center(
              child: Container(
                width: 200.0,
                height: 200.0,
                color: Colors.orange,
                child: Center(
                  child: Text('Second widget'),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
double _firstWidgetOpacity=1.0;
double _secondWidgetBottomPosition=-200.0;
制作动画(){
设置状态(){
如果(_firstWidgetOpacity==1.0){
_firstWidgetOpacity=0.0;
_secondWidgetBottomPosition=MediaQuery.of(context).size.height/2-140.0;
}否则{
_firstWidgetOpacity=1.0;
_secondWidgetBottomPosition=-200.0;
}
});
}
@凌驾
void initState(){
super.initState();
打印((560/60).floor());
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
floatingActionButton:floatingActionButton.extended(
onPressed:设置动画,
标签:文本(“动画”),
),
主体:堆栈(
儿童:[
对齐(
对齐:对齐.center,
儿童:动画能力(
持续时间:持续时间(毫秒:350),
不透明度:_firstWidgetOpacity,
曲线:Curves.easeIn,
子:容器(
宽度:200.0,
高度:200.0,
颜色:颜色,蓝色,
儿童:中心(
子:文本(“第一个小部件”),
),
),
),
),
动画定位(
持续时间:持续时间(毫秒:350),
曲线:曲线,弹力素,
底部:_secondWidgetBottomPosition,
左:0.0,
右:0.0,
儿童:中心(
子:容器(
宽度:200.0,
高度:200.0,
颜色:颜色。橙色,
儿童:中心(
子:文本(“第二个小部件”),
),
),
),
),
],
),
);
}
}
您可以使用持续时间和曲线来获得所需的结果