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
相关产品推荐
相关产品推荐

