Animation 如何使用颤振更改导航动画
在颤振中导航到页面或从页面导航到页面时,是否有任何方法可以更改默认动画?您可以使用。 请检查下面的代码Animation 如何使用颤振更改导航动画,animation,flutter,navigation,Animation,Flutter,Navigation,在颤振中导航到页面或从页面导航到页面时,是否有任何方法可以更改默认动画?您可以使用。 请检查下面的代码 import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildConte
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Transition Animation Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new FirstPage(),
);
}
}
class FirstPage extends StatefulWidget {
@override
_FirstPageState createState() => new _FirstPageState();
}
class _FirstPageState extends State<FirstPage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('First Page'),
),
body: new Center(
child: new RaisedButton(
child: new Text('Goto Second Page'),
onPressed: () {
Navigator.of(context).push(new SecondPageRoute());
},
),
),
);
}
}
class SecondPageRoute extends CupertinoPageRoute {
SecondPageRoute()
: super(builder: (BuildContext context) => new SecondPage());
// OPTIONAL IF YOU WISH TO HAVE SOME EXTRA ANIMATION WHILE ROUTING
@override
Widget buildPage(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) {
return new FadeTransition(opacity: animation, child: new SecondPage());
}
}
class SecondPage extends StatefulWidget {
@override
_SecondPageState createState() => new _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Second Page'),
),
body: new Center(
child: new Text('This is the second page'),
),
);
}
}
导入“包装:颤振/材料.省道”;
进口“包装:颤振/cupertino.dart”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“过渡动画演示”,
主题:新主题数据(
主样本:颜色。蓝色,
),
主页:新建第一页(),
);
}
}
类FirstPage扩展StatefulWidget{
@凌驾
_FirstPageState createState()=>新建_FirstPageState();
}
类_FirstPageState扩展了状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“第一页”),
),
正文:新中心(
孩子:新升起的按钮(
子项:新文本(“转到第二页”),
已按下:(){
Navigator.of(context.push)(新的SecondPageRoute());
},
),
),
);
}
}
类SecondPageRoute扩展了CupertinoPageRoute{
第二页路由()
:super(builder:(BuildContext context)=>newsecondpage());
//如果希望在布线时有一些额外的动画,则为可选
@凌驾
小部件构建页面(构建上下文、动画、,
动画(二级动画){
返回新的FadeTransition(不透明度:动画,子项:新建第二页());
}
}
类SecondPage扩展StatefulWidget{
@凌驾
_SecondPageState createState()=>new_SecondPageState();
}
类_SecondPageState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“第二页”),
),
正文:新中心(
子项:新文本(“这是第二页”),
),
);
}
}
有些人玩动画
// OPTIONAL IF YOU WISH TO HAVE SOME EXTRA ANIMATION WHILE ROUTING
@override
Widget buildPage(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) {
return new RotationTransition(
turns: animation,
child: new ScaleTransition(
scale: animation,
child: new FadeTransition(
opacity: animation,
child: new SecondPage(),
),
));
}
//如果您希望在路由时有一些额外的动画,则此选项是可选的
@凌驾
小部件构建页面(构建上下文、动画、,
动画(二级动画){
返回新的旋转过渡(
转向:动画,
子:新的ScaleTransition(
比例:动画,
儿童:新时尚转换(
不透明度:动画,
子项:新建第二页(),
),
));
}
您可以对buildTransitions进行子类化和重写
例如:
用动画替换淡入淡出过渡我通过在
pageTransitionsTheme
中为应用程序级主题提供我自己的构建器
和自定义地图来实现这一点
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Startup Name Generator Tile',
home: RandomWords(),
theme: new ThemeData(
primaryColor: Colors.white,
// Add the line below to get horizontal sliding transitions for routes.
pageTransitionsTheme: PageTransitionsTheme(builders: {TargetPlatform.android: CupertinoPageTransitionsBuilder(),}),
),
);
}
}
当然,我没有为ios添加地图条目,因为我只为
TargetPlatform
使用android 您可以使用PageRouteBuilder
以下示例显示导航到第二个屏幕时的FadeTransition
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (c, a1, a2) => Page2(),
transitionsBuilder: (c, anim, a2, child) => FadeTransition(opacity: anim, child: child),
transitionDuration: Duration(milliseconds: 2000),
),
);
您还可以从中查看
page\u transition
package。此包包含以下不同的转换。
褪色
右向左,
左向右,
上下,
低头,
刻度(带校准),
旋转(对齐),
尺寸(带对齐),
右至左逐渐消失,
leftToRightWithFade感谢您的回答。在我现有的应用程序代码中,我用
CupertinoPageRoute
替换了MaterialPageRoute
,并获得了滑动动画。@n接着这个。我已经测试过了,效果很好:谢谢你的回答。我检查了flatter文档中的buildTransitions
(),似乎我必须从头开始为我的动画编写代码。在这种情况下,我认为使用CupertinoPageRoute
会更简单。尽管如此,这个解决方案还是很有帮助的。只是用我们的动画替换淡入淡出对我们没有帮助,因为不同的动画有不同的参数。如何在导航的名称中使用它?很好,谢谢!谢谢,请您也建议如何更改动画样式。@Sandepsing您可以在transitionsBuilder
中执行此操作,我使用了FadeTransition
,您可以选择自己的动画并播放it@CopsOnRoad当然,让我试试,谢谢你的快速回复!它正在工作,我在CopsOnRoad做得不对
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Startup Name Generator Tile',
home: RandomWords(),
theme: new ThemeData(
primaryColor: Colors.white,
// Add the line below to get horizontal sliding transitions for routes.
pageTransitionsTheme: PageTransitionsTheme(builders: {TargetPlatform.android: CupertinoPageTransitionsBuilder(),}),
),
);
}
}
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (c, a1, a2) => Page2(),
transitionsBuilder: (c, anim, a2, child) => FadeTransition(opacity: anim, child: child),
transitionDuration: Duration(milliseconds: 2000),
),
);