AnimatedCrossFade 是一种在 2 个视图之间交换的简单方法。
在两个给定子级和动画之间交叉淡入淡出的小部件
本身在它们的大小之间。
这个小部件是一个增强的AnimatedSwitcher,类似于ViewFlipper,因为它负责根据状态通过插入其大小和不透明度来在两个视图之间交换。
这是一个简单的AnimatedCrossFade 示例,它在不同颜色和大小的 2 个Containers 之间切换。
class MySimpleWidget extends StatefulWidget {
MySimpleWidget({Key key, this.title}) : super(key: key);
final String title;
@override
_MySimpleWidgetState createState() => _MySimpleWidgetState();
}
class _MySimpleWidgetState extends State<MySimpleWidget> {
bool _showFirst = false;
void _swapWidget() {
setState(() {
_showFirst = !_showFirst;
});
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
AnimatedCrossFade(
crossFadeState: _showFirst ? CrossFadeState.showFirst : CrossFadeState.showSecond,
firstChild: Container(color: Colors.red, width: 100, height: 50),
secondChild: Container(color: Colors.blue, width: 100, height: 100),
duration: const Duration(milliseconds: 500),
),
MaterialButton(
onPressed: _swapWidget,
child: const Text('Swap widget'),
)
],
),
);
}
}
它的限制是它只能在 2 个孩子之间交叉淡入淡出,3 个或更多孩子的替代品可以是PageView。