Flutter:如何将 PageRoute Animation 与 Navigator.of(context).pushNamed 结合起来
Posted
技术标签:
【中文标题】Flutter:如何将 PageRoute Animation 与 Navigator.of(context).pushNamed 结合起来【英文标题】:Flutter: How to combine PageRoute Animation with Navigator.of(context).pushNamed 【发布时间】:2021-01-19 23:49:42 【问题描述】:我想在我的颤振项目中使用动画页面路由。现在我所有的路线都是命名路线,我不想改变它们。有什么方法可以将页面路由动画与命名路由一起使用?喜欢:如果我使用Navigator.of(context).pushNamed(PageTwo.routename)
从PageOne()
转到PageTwo()
,我不想看到默认过渡,可能是我想使用缩放动画或淡入淡出动画。有什么办法吗?
onTap: ()
Navigator.of(context).pushNamed(
ProductsSearch.routeName,
arguments: ScreenArguments(null, null, null, null, null, null, true, false),
);
,
【问题讨论】:
其实不能用pageTransitionsTheme
cz我用的是NeumorphicThemeData
,它没有叫pageTransitionsTheme
的参数
【参考方案1】:
作为您的问题,我已经解决了这个演示答案,一旦它可以工作,请尝试。
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> animation,
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,
);
,
);
【讨论】:
我想知道如何在不影响我的论点的情况下使用 pushNamed 您需要在 MaterialApp 小部件中使用 onGenerateRoute。 如果我使用 onGenerateRoute,我不能使用参数。我必须作为参数传递。我有什么办法吗? 我已经编辑了我的答案,我希望你的问题得到解决,如果它正在工作,那么勾选答案。以上是关于Flutter:如何将 PageRoute Animation 与 Navigator.of(context).pushNamed 结合起来的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D骨骼动画的分解(CleanData.Ani详解)
javascript Magic Carpet Footer显示#bb #footer #ani