上滑换屏动画
Slide-up screen change animation
刚接触flutter开发,想做这种换屏时的动画(第一页也往上滑)。我搜索了有关此的教程和帖子,但没有找到。有办法吗?
这是工作代码。您可以尝试更改反向动画的持续时间和值 from
。但现在它似乎工作得很好
class _MyWidgetState extends State<MyWidget>
with SingleTickerProviderStateMixin {
AnimationController _animationController;
@override
void initState() {
_animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 2000)); // you can try to set another duration
super.initState();
}
@override
Widget build(BuildContext context) {
_animationController.reverse(from: 0.2); // you can try to set another value for from
return SlideTransition(
position: Tween<Offset>(
begin: Offset.zero,
end: const Offset(0.0, -1.0),
).animate(_animationController),
child: Scaffold(
appBar: AppBar(
title: Text('MyWidget'),
),
body: _createBody(),
));
}
Widget _createBody() {
// create body here
// perform this action on click:
Navigator.of(context).push(getRoute());
}
PageRoute getRoute() {
_animationController.forward(from: 0.0);
return PageRouteBuilder(
pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
return MySecondScreen();
},
transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(0.0, 1.0),
end: Offset.zero,
).animate(animation),
child: SlideTransition(
position: Tween<Offset>(
begin: Offset.zero,
end: const Offset(0.0, 1.0),
).animate(secondaryAnimation),
child: child,
),
);
},
);
}
dispose() {
super.dispose();
_animationController.dispose();
}
}
刚接触flutter开发,想做这种换屏时的动画(第一页也往上滑)。我搜索了有关此的教程和帖子,但没有找到。有办法吗?
这是工作代码。您可以尝试更改反向动画的持续时间和值 from
。但现在它似乎工作得很好
class _MyWidgetState extends State<MyWidget>
with SingleTickerProviderStateMixin {
AnimationController _animationController;
@override
void initState() {
_animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 2000)); // you can try to set another duration
super.initState();
}
@override
Widget build(BuildContext context) {
_animationController.reverse(from: 0.2); // you can try to set another value for from
return SlideTransition(
position: Tween<Offset>(
begin: Offset.zero,
end: const Offset(0.0, -1.0),
).animate(_animationController),
child: Scaffold(
appBar: AppBar(
title: Text('MyWidget'),
),
body: _createBody(),
));
}
Widget _createBody() {
// create body here
// perform this action on click:
Navigator.of(context).push(getRoute());
}
PageRoute getRoute() {
_animationController.forward(from: 0.0);
return PageRouteBuilder(
pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
return MySecondScreen();
},
transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(0.0, 1.0),
end: Offset.zero,
).animate(animation),
child: SlideTransition(
position: Tween<Offset>(
begin: Offset.zero,
end: const Offset(0.0, 1.0),
).animate(secondaryAnimation),
child: child,
),
);
},
);
}
dispose() {
super.dispose();
_animationController.dispose();
}
}