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详解)

ANI功能分析

javascript Magic Carpet Footer显示#bb #footer #ani

R (Ani Katchova) · Eric

如何将 Flutter 移动应用迁移到 Flutter Web

如何将“Flutter for Web”转换为“Flutter for Mobile”?