flutter Get.toNamed同个页面不跳转时什么原因呢?

新手上路,请多包涵

flutter项目中使用GetX作为路由管理,我一般都是使用Get.toNamed('/xxx')作为跳转,但是最近发现了一个尴尬的事情。
新闻列表页:

InkWell(
  onTap: () {
     Get.toNamed('/detail', arguments: {'id': 1});
  },
  child: Text('这是第一篇新闻的标题')
),

在新闻1的页面中用arguments['id']去服务器请求数据,这一切没问题。
但是如果在新闻1页面中想实现【下一篇:这是第二篇新闻的标题】时,使用以下代码:

InkWell(
  onTap: () {
     Get.toNamed('/detail', arguments: {'id': 2});
  },
  child: Text('这是第二篇新闻的标题')
),

页面不跳转页不报错,请问大家有类似的情况吗?

我尝试过把
Get.toNamed('/detail', arguments: {'id': 1});
换成
Get.to(() => Detail(), arguments: {'id': 1});
在第一层有用,后面就没有。
也就是说,从列表跳到新闻1页面,再从新闻1页面跳到其它新闻页时有用,比如跳到新闻2页面。但是从新闻2页面要调到其他新闻页面则没用,不跳转页不报错。

阅读 1k
avatarAI BotBETA

在使用 GetX 作为 Flutter 项目的路由管理时,如果 Get.toNamed('/detail', arguments: {'id': 2}); 没有实现页面跳转并且没有报错,可能的原因如下:

  1. 路由配置问题:确保你在 GetMaterialAppGet.put() 中正确配置了 /detail 路由。如果没有正确配置,Get.toNamed 将无法找到对应的页面进行跳转。
  2. 页面状态保持:由于 GetX 支持页面状态的保持,当第二次调用 Get.toNamed 时,如果目标页面已经在路由栈中,GetX 默认不会创建新的页面实例,而是复用已存在的页面实例。如果页面逻辑依赖于通过 arguments 传递的参数来刷新数据,那么你可能需要在目标页面的 onInitonLoad 方法中监听参数变化,并手动触发数据加载。
  3. 参数传递问题:即使页面没有跳转,你也可以通过 Get.arguments 获取传递的参数。确认在 Detail 页面是否正确获取了参数,并且根据参数加载了对应的数据。
  4. GetX 绑定问题:如果你使用的是 GetX 的状态管理功能,确保你的控制器(Controller)被正确绑定到页面,并且页面正确地响应了状态的变化。
  5. 代码逻辑错误:检查 Detail 页面的其他代码逻辑,确认没有其他代码阻止了页面的跳转或者覆盖了 Get.toNamed 的行为。

为了解决这个问题,你可以尝试以下步骤:

  • 检查路由配置:确保 /detail 路由在路由配置中正确无误。
  • 监听参数变化:在 Detail 页面的 onInitonLoad 方法中监听 arguments 的变化,并在参数变化时加载对应的数据。
  • 调试和日志:添加日志输出,检查 Get.toNamed 是否被调用,以及参数是否正确传递。
  • 更新 GetX:如果你使用的是较旧的 GetX 版本,尝试更新到最新版本,看看问题是否得到解决。

如果以上步骤都不能解决问题,你可能需要提供更详细的代码和配置信息,以便进一步分析问题所在。

1 个回答

Get.toNamed('/detail', arguments: {'id': 1},preventDuplicates = false);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏