flutter如何实现路由动画
在Flutter中如何自定义页面切换时的路由动画效果?我想实现类似iOS的左右滑动切换或者上下渐隐渐现的效果,但不知道具体该怎么操作。官方提供的MaterialPageRoute只有默认的动画,请问有没有更灵活的方式来自定义这些过渡动画?需要继承PageRouteBuilder还是使用Hero动画?能否提供一个简单的代码示例?
        
          2 回复
        
      
      
        Flutter中通过PageRouteBuilder自定义路由动画,使用PageTransitionsBuilder定义进出动画。可结合AnimatedWidget或Tween动画库实现缩放、淡入淡出等效果。
更多关于flutter如何实现路由动画的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,可以通过以下几种方式实现路由动画:
1. 使用PageRouteBuilder自定义动画
Navigator.push(
  context,
  PageRouteBuilder(
    pageBuilder: (context, animation, secondaryAnimation) => TargetPage(),
    transitionsBuilder: (context, animation, secondaryAnimation, child) {
      // 淡入动画
      return FadeTransition(
        opacity: animation,
        child: child,
      );
    },
    transitionDuration: Duration(milliseconds: 500),
  ),
);
2. 使用MaterialPageRoute的默认动画
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => TargetPage(),
    // 可选:自定义动画时长
    // fullscreenDialog: true, // 底部向上动画
  ),
);
3. 自定义滑动动画
PageRouteBuilder(
  pageBuilder: (context, animation, secondaryAnimation) => TargetPage(),
  transitionsBuilder: (context, animation, secondaryAnimation, child) {
    const begin = Offset(1.0, 0.0); // 从右侧进入
    const end = Offset.zero;
    const curve = Curves.ease;
    
    var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
    
    return SlideTransition(
      position: animation.drive(tween),
      child: child,
    );
  },
);
4. 缩放动画
transitionsBuilder: (context, animation, secondaryAnimation, child) {
  return ScaleTransition(
    scale: Tween<double>(
      begin: 0.0,
      end: 1.0,
    ).animate(CurvedAnimation(
      parent: animation,
      curve: Curves.fastOutSlowIn,
    )),
    child: child,
  );
},
5. 旋转动画
transitionsBuilder: (context, animation, secondaryAnimation, child) {
  return RotationTransition(
    turns: Tween<double>(
      begin: 0.0,
      end: 1.0,
    ).animate(CurvedAnimation(
      parent: animation,
      curve: Curves.easeInOut,
    )),
    child: child,
  );
},
6. 组合动画
transitionsBuilder: (context, animation, secondaryAnimation, child) {
  return SlideTransition(
    position: Tween<Offset>(
      begin: Offset(1.0, 0.0),
      end: Offset.zero,
    ).animate(animation),
    child: FadeTransition(
      opacity: animation,
      child: child,
    ),
  );
},
主要参数说明:
- pageBuilder: 构建目标页面
- transitionsBuilder: 定义转场动画
- transitionDuration: 动画时长
- reverseTransitionDuration: 返回动画时长
这些方法可以灵活组合,创建各种复杂的路由动画效果。
 
        
       
             
             
            

