Flutter命名路由中如何传递多个参数?
Flutter路由传参:同时传递多个数值类型参数的实现方法
方法一:使用Map传递参数(快速实现)
直接把需要传递的参数打包成Map,作为arguments传入:
修改Navigator调用代码:
Navigator.of(context).pushNamed( AppRoutes.digitalBusinessGuideInstructions, arguments: { 'selectedAmount': selectedAmount, 'selectedIndexes': selectedIndexes, // 按实际类型传入,比如int或List<int> }, );
修改路由处理代码:
case AppRoutes.digitalBusinessGuideInstructions: final params = settings.arguments as Map<String, dynamic>; final int selectedAmount = params['selectedAmount'] as int; // 若selectedIndexes是列表类型,改为List<int> selectedIndexes = params['selectedIndexes'] as List<int> final int selectedIndexes = params['selectedIndexes'] as int; return AppPageRoute( builder: (context) => DigitalBusinessGuideInstructions( selectedAmount: selectedAmount, selectedIndexes: selectedIndexes, ), );
方法二:使用自定义类封装参数(类型安全,推荐)
如果想避免Map类型转换的潜在风险,可定义专门的参数类实现类型安全传递:
1. 定义参数类:
class DigitalBusinessParams { final int selectedAmount; final int selectedIndexes; // 或List<int>,根据实际需求调整类型 DigitalBusinessParams({ required this.selectedAmount, required this.selectedIndexes, }); }
2. 修改Navigator调用代码:
Navigator.of(context).pushNamed( AppRoutes.digitalBusinessGuideInstructions, arguments: DigitalBusinessParams( selectedAmount: selectedAmount, selectedIndexes: selectedIndexes, ), );
3. 修改路由处理代码:
case AppRoutes.digitalBusinessGuideInstructions: final params = settings.arguments as DigitalBusinessParams; return AppPageRoute( builder: (context) => DigitalBusinessGuideInstructions( selectedAmount: params.selectedAmount, selectedIndexes: params.selectedIndexes, ), );
注意:如果selectedIndexes是列表类型(如List<int>),只需将参数类和类型转换部分的类型对应修改即可,两种方法均适用。
内容的提问来源于stack exchange,提问作者KIRAx2000
相关产品推荐
相关产品推荐

