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

Flutter导航传参问题:ModalRoute获取arguments返回null

Flutter导航传参返回null的解决方法

1. 修正拼写错误

你的DetailScreen代码里存在拼写错误:settings.arguements应该是settings.arguments(少了一个m),这是导致获取到null的直接原因之一。修正后的代码:

class DetailScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
      final arguments = ModalRoute.of(context)!.settings.arguments;
      print(arguments); // 现在应该能获取到预期值
      return Scaffold(
        body: Container(),
      );
  }
}

2. 检查路由生成逻辑(AppRoutes.generateRoute)

因为你使用了onGenerateRoute管理路由,必须确保生成/detailScreenRoute时,将路由的settings.arguments传递给DetailScreen。如果generateRoute未处理参数传递,即使跳转时传了参数,页面也无法获取。示例正确实现如下:

class AppRoutes {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case '/detailScreenRoute':
        // 传递包含arguments的settings给页面
        return MaterialPageRoute(
          builder: (context) => DetailScreen(),
          settings: settings, // 关键:保留原settings,确保参数被传递
        );
      // 其他路由处理逻辑...
      default:
        return MaterialPageRoute(builder: (context) => MainScreen());
    }
  }
}

3. 确保上下文有效性

如果上述修正后仍有问题,检查ModalRoute.of(context)使用的上下文是否属于当前路由的上下文。若在父级widget上下文中调用,可能获取到上层路由信息,可通过Builder包裹确保使用当前页面上下文:

class DetailScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Builder(
      builder: (innerContext) {
        final arguments = ModalRoute.of(innerContext)!.settings.arguments;
        print(arguments);
        return Scaffold(body: Container());
      },
    );
  }
}

内容的提问来源于stack exchange,提问作者Beatle Refractor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:55:04