如何解决Flutter:如何将PageRoute动画与Navigator.ofcontext.pushNamed结合
我想在我的Flutter项目中使用动画页面路由。现在我所有的路线都命名为路线,我不想更改它们。有什么办法可以将“页面路由动画”与命名路由一起使用?就像:如果我要使用PageOne()
从PageTwo()
到Navigator.of(context).pushNamed(PageTwo.routename)
,我不想看到默认的过渡,可能是我想使用比例动画或淡入淡出动画。有什么办法吗?
onTap: () {
Navigator.of(context).pushNamed(
ProductsSearch.routeName,arguments: ScreenArguments(null,null,true,false),);
},
解决方法
由于您的问题我已经解决了该演示答案,请尝试一下,然后再试一次。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: HomePage(),onGenerateRoute: (RouteSettings settings) {
final SecondHome args = settings.arguments;
switch (settings.name) {
case '/':
return SlideRightRoute(widget:HomePage());
break;
case '/second':
return
SlideRightRoute(widget:SecondHome(args.data1,args.data2,args.boolvalue));
break;
}
},),);
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),body: new Center(
child: RaisedButton(
onPressed: () {
Navigator.of(context).pushNamed(
'/second',arguments:SecondHome("data1","data2",true),);
},child: Text('Second Home'),);
}
}
class SecondHome extends StatelessWidget {
String data1;
String data2;
bool boolvalue;
SecondHome(this.data1,this.data2,this.boolvalue);
@override
Widget build(BuildContext context) {
print("Secoendhomedata${data1}");
return Scaffold(
appBar: AppBar(
title: Text('Second Home'),body: new Center(
child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},child: Text('Go Back'),);
}
}
class SlideRightRoute extends PageRouteBuilder {
final Widget widget;
SlideRightRoute({this.widget})
: super(
pageBuilder: (BuildContext context,Animation<double> animation,Animation<double> secondaryAnimation) {
return widget;
},transitionsBuilder: (BuildContext context,Animation<double> secondaryAnimation,Widget child) {
return new SlideTransition(
position: new Tween<Offset>(
begin: const Offset(1.0,0.0),end: Offset.zero,).animate(animation),child: child,);
},);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。