ОБНОВЛЕНИЕ
Here is my simple FlipViewWidget
class FlipView extends StatefulWidget {
final Widget front, back;
FlipView({Key key, @required this.front, @required this.back}) : super(key: key);
@override
_FlipViewState createState() => _FlipViewState();
}
class _FlipViewState extends State<FlipView> with SingleTickerProviderStateMixin {
Animation _animation;
AnimationController _controller;
@override
void initState() {
_controller = AnimationController(duration: Duration(milliseconds: 400), vsync: this);
_animation = Tween(begin: 0.0, end: 1.0).animate(_controller);
super.initState();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _controller,
builder: (BuildContext context, Widget child) {
bool isFront = _controller.value < .5;
return InkWell(
onTap: () {
if (_animation.isDismissed) {
_controller.forward();
} else if (_animation.isCompleted) {
_controller.reverse();
}
},
child: Transform(
transform: Matrix4.identity()
..setEntry(3, 2, 0.002)
..rotateX(pi * _animation.value + (isFront ? 0 : pi)),
alignment: FractionalOffset.center,
child: isFront ? widget.front : widget.back,
),
);
},
);
}
}
Использование
class FlipViewTest extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: 200,
height: 100,
child: FlipView(
front: Container(
color: Colors.red,
alignment: Alignment.center,
child: Text('Front', style: TextStyle(fontSize: 25, color: Colors.white)),
),
back: Container(
color: Colors.green,
alignment: Alignment.center,
child: Text('Back', style: TextStyle(fontSize: 25, color: Colors.white)),
),
),
),
),
);
}
}
СТАРЫЙ
установить контейнер внутри виджета преобразования. и вы можете легко изменить выравнивание.
@override
Widget build(BuildContext context) {
animationController.forward();
return Scaffold(
body: AnimatedBuilder(
animation: animationController,
builder: (BuildContext context, Widget child) {
return Center(
child: Transform(
transform: Matrix4.identity()
..rotateX(2 * 3.14 * animation.value),
alignment: FractionalOffset.center,
child: GestureDetector(
onTap: () {
animationController.repeat();
},
child: Container(
height: 150,
width: 150,
color: Colors.yellow,
child: Center(child: Text('Text 1')),
),
),
),
);
},
),
);
}