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

Flutter中如何将类作为参数传递?实现权限跳转不同页面

解决方案:通过页面构建回调实现动态跳转

你可以给RecipeCard新增一个页面构建回调参数,用它来动态生成要跳转的目标页面,同时把食谱的各项参数传递过去,这样就能轻松区分普通用户和管理员的跳转逻辑。

修改后的RecipeCard代码

class RecipeCard extends StatelessWidget {
  final String title;
  final String rating;
  final String cookTime;
  final String thumbnailUrl;
  // 新增:接收一个构建目标页面的函数,参数是食谱属性,返回对应页面
  final Widget Function(String title, String cookTime, String rating, String thumbnailUrl) pageBuilder;

  const RecipeCard({
    super.key,
    required this.title,
    required this.cookTime,
    required this.rating,
    required this.thumbnailUrl,
    required this.pageBuilder, // 构造函数中加入新参数
  });

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        Navigator.push(
          context,
          PageRouteBuilder(
            transitionDuration: const Duration(seconds: 1),
            transitionsBuilder: (context, animation, animationTime, child) {
              animation = CurvedAnimation(
                  parent: animation, curve: Curves.fastLinearToSlowEaseIn);
              return ScaleTransition(
                scale: animation,
                alignment: Alignment.center,
                child: child,
              );
            },
            pageBuilder: (context, animation, animationTime) {
              // 调用传入的构建函数,生成目标页面
              return pageBuilder(title, cookTime, rating, thumbnailUrl);
            },
          ),
        );
      },
      child: Container(...), // 保留原Container内容
    );
  }
}

两种场景的使用示例

  • 普通用户跳转(无编辑/删除)
RecipeCard(
  title: "番茄炒蛋",
  cookTime: "10分钟",
  rating: "4.8",
  thumbnailUrl: "xxx.jpg",
  pageBuilder: (title, cookTime, rating, thumbnailUrl) {
    return RecipeDetailPage(
      title: title,
      cookTime: cookTime,
      rating: rating,
      thumbnailUrl: thumbnailUrl,
    );
  },
)
  • 管理员跳转(带编辑/删除)
RecipeCard(
  title: "番茄炒蛋",
  cookTime: "10分钟",
  rating: "4.8",
  thumbnailUrl: "xxx.jpg",
  pageBuilder: (title, cookTime, rating, thumbnailUrl) {
    return UpdateOrDeleteRecipe(
      title: title,
      cookTime: cookTime,
      rating: rating,
      thumbnailUrl: thumbnailUrl,
    );
  },
)

优势说明

这种方式比直接传递类名更实用:

  • 直接绑定参数传递逻辑,无需额外处理参数跳转
  • 支持不同页面的个性化参数需求,扩展性更强
  • 类型安全,避免反射实例化类带来的潜在问题

内容的提问来源于stack exchange,提问作者Mr Fin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:05:48