You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter页面跳转时如何实现圆角页面且适配屏幕?

页面跳转时实现适配屏幕的圆角过渡效果

针对你遇到的问题,以下是优化后的实现方案,解决固定圆角适配差、动画过渡生硬的问题:

核心改进点

  • 采用屏幕自适应圆角:基于设备屏幕尺寸动态计算圆角大小,保证不同设备上比例一致
  • 使用圆角动画补间:替代硬判断动画值的方式,实现圆角从有到无的平滑过渡
  • 同步滑动与圆角动画曲线:让视觉效果更协调

完整代码实现

import 'package:flutter/material.dart';

class RoundedSlideRoute extends PageRouteBuilder {
  final Widget child;
  final Curve curve;
  final Duration duration;

  RoundedSlideRoute({
    required this.child,
    this.curve = Curves.easeInOut,
    this.duration = const Duration(milliseconds: 300),
  }) : super(
          pageBuilder: (context, animation, secondaryAnimation) => child,
          transitionsBuilder: (context, animation, secondaryAnimation, child) {
            // 基于屏幕短边的1/12计算圆角,适配不同设备
            final screenShortSide = MediaQuery.of(context).size.shortestSide;
            final adaptiveCornerRadius = screenShortSide / 12;

            // 圆角动画补间:从顶部圆角过渡到无圆角
            final borderRadiusTween = BorderRadiusTween(
              begin: BorderRadius.vertical(top: Radius.circular(adaptiveCornerRadius)),
              end: BorderRadius.zero,
            );

            // 滑动位移动画
            final offsetAnimation = Tween<Offset>(
              begin: const Offset(0, 1),
              end: Offset.zero,
            ).animate(CurvedAnimation(
              parent: animation,
              curve: curve,
            ));

            return SlideTransition(
              position: offsetAnimation,
              child: ClipRRect(
                borderRadius: borderRadiusTween.evaluate(animation),
                child: child,
              ),
            );
          },
        );
}

使用方式

在跳转页面时直接调用自定义路由:

Navigator.push(
  context,
  RoundedSlideRoute(child: TargetPage()),
);

额外注意事项

  • 确保目标页面的根布局占满屏幕(如使用Scaffold或设置宽高为double.infinity),否则ClipRRect无法正确裁剪全屏区域
  • 可根据需求调整screenShortSide / 12的比例值,控制圆角的大小

内容的提问来源于stack exchange,提问作者Machine Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:07:54