本文介绍了颤振过渡出口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Android API上,我们可以使用
On Android API we can use
overridePendingTransition(int enterAnim, int exitAnim)
定义进入和退出转换.
如何在Flutter中做到这一点?
How to do it in Flutter?
我已经实现了这段代码
class SlideLeftRoute extends PageRouteBuilder {
final Widget enterWidget;
SlideLeftRoute({this.enterWidget})
: super(
pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
return enterWidget;
},
transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
return SlideTransition(
position: new Tween<Offset>(
begin: const Offset(1.0, 0.0),
end: Offset.zero,
).animate(animation),
child: child
);
},
);
}
,但它仅定义输入转换.如何定义退出转场?
but it only defines the enter transition. How can i define de exit transition?
更新
想象一下,执行时我有两个屏幕(Screen1和Screen2)
Imagine that i have two screens (Screen1 and Screen2), when i execute
Navigator.push(
context, SlideLeftRoute(enterWidget: Screen2()));
我想将动画应用于Screen1和Screen2而不是不仅应用于Screen2
i'd like to apply an animation to both Screen1 and Screen2 and not only to Screen2
推荐答案
我使用了不同的方式,但是diegodeveloper提供了类似的逻辑
I used a different way, but similar logic provided by diegodeveloper
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Page1(),
);
}
}
class Page1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Page 1"),
leading: Icon(Icons.menu),
),
body: Container(
color: Colors.grey,
child: Center(
child: RaisedButton(
onPressed: () => Navigator.push(context, MyCustomPageRoute(previousPage: this, builder: (context) => Page2())),
child: Text("2nd Page"),
),
),
),
);
}
}
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Page 2")),
body: Container(
color: Colors.blueGrey,
child: Center(
child: RaisedButton(
onPressed: () => Navigator.pop(context),
child: Text("Back"),
),
),
),
);
}
}
class MyCustomPageRoute extends MaterialPageRoute {
final Widget previousPage;
MyCustomPageRoute({this.previousPage, WidgetBuilder builder, RouteSettings settings}) : super(builder: builder, settings: settings);
@override
Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget currentPage) {
Animation<Offset> _slideAnimationPage1 = Tween<Offset>(begin: Offset(0.0, 0.0), end: Offset(-1.0, 0.0)).animate(animation);
Animation<Offset> _slideAnimationPage2 = Tween<Offset>(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0)).animate(animation);
return Stack(
children: <Widget>[
SlideTransition(position: _slideAnimationPage1, child: previousPage),
SlideTransition(position: _slideAnimationPage2, child: currentPage),
],
);
}
}
这篇关于颤振过渡出口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!