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

使用Getx实现Flutter Web无#路径传参与URL直接跳转ProductScreen

解决步骤

1. 配置PathUrlStrategy移除URL中的#符号

Flutter Web默认使用Hash路由模式,URL会自带#,你需要在main函数入口配置路径路由模式:

import 'package:flutter/foundation.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';

void main() {
  // 仅针对Web平台启用PathUrlStrategy
  if (kIsWeb) {
    setUrlStrategy(PathUrlStrategy());
  }
  runApp(const MyApp());
}

注意:部署到服务器时需要配置重定向规则,将所有路径请求都指向web/index.html,否则用户直接访问子路径会出现404错误,比如Nginx配置try_files $uri $uri/ /index.html;即可

2. 修正GetPage路由配置

你当前的GetPage命名规则错误,需要按照要求的URL格式配置带占位符的路由规则:

GetPage(
  // 两个可变参数用:开头定义占位符,末尾跟固定参数product
  name: '/:param1/:param2/product',
  page: () => ProductScreen(),
  binding: ProductScreenBinding(),
),

3. 修正初始页面的跳转逻辑

跳转的命名路由需要和你定义的路由格式保持一致:

GestureDetector(
  child: Container(
    //some content inside
  ),
  onTap: () {
      Get.toNamed(
          '/$variableParameter1/$variableParameter2/product',
      );
  },
)

4. 修正控制器获取参数的逻辑

GetX的路径参数不会存放在Get.arguments中,需要通过Get.parameters获取占位符对应的参数值:

class ProductController extends GetxController {
  var screenprm1 = Get.parameters['param1']?.obs ?? ''.obs;
  var screenprm2 = Get.parameters['param2']?.obs ?? ''.obs;
}

做完以上调整后即可满足全部需求:跳转后URL格式符合要求、无#符号、用户直接访问对应URL可正常进入ProductScreen页面并拿到两个可变参数。

内容的提问来源于stack exchange,提问作者vivek shirodkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:48:01