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

Flutter中如何通过GoRouter获取含子域名的完整路径URL用于深度链接?

获取子域名与完整路径的实现方案

1. Web端直接从浏览器环境拿取

Web环境下,域名信息存在浏览器的window.location对象里,用dart:js直接调用就能拿到:

import 'dart:js' as js;

// 获取完整域名(含子域名)
String getCurrentDomain() {
  return js.context['location']['host'].toString();
}

// 获取完整URL,方便后续解析
String getFullUrl() {
  return js.context['location']['href'].toString();
}

在GoRouter的路由页面里,你可以把这个域名和GoRouterState的subloc(当前路径)拼接成需要的*.domain.com/path格式。

如果是移动端或桌面端,用户通过链接打开App的场景,用uni_links插件监听跳转链接,从完整URL里解析域名和路径:

import 'package:uni_links/uni_links.dart';

// 初始化监听Deep Link
Future<void> setupDeepLinkListener() async {
  // 处理App启动时的初始链接
  final initialLink = await getInitialLink();
  if (initialLink != null) {
    _parseLink(initialLink);
  }
  // 处理App运行中收到的链接
  linkStream.listen((link) {
    if (link != null) {
      _parseLink(link);
    }
  });
}

// 解析链接,提取域名和路径
void _parseLink(String link) {
  final uri = Uri.parse(link);
  final domain = uri.host; // 拿到子域名+主域名,比如sub.domain.com
  final path = uri.path; // 拿到路径,比如/path
  final fullTarget = '$domain$path'; // 拼接成需要的格式
  // 把fullTarget存到全局状态(比如Provider、Riverpod)里,供GoRouter页面调用
}

之后在GoRouter的页面组件里,直接从全局状态取这个拼接好的字符串就行,不用依赖GoRouterState的路径信息。

3. 结合GoRouter传递域名信息

可以在初始化GoRouter时,把提前获取到的域名通过extra参数传给路由,或者直接在路由builder里调用获取方法:

final goRouter = GoRouter(
  routes: [
    GoRoute(
      path: '/path',
      builder: (context, state) {
        final domain = getCurrentDomain(); // 或者从全局状态取
        final fullPath = '$domain${state.subloc}';
        return YourPage(fullPath: fullPath);
      },
    ),
  ],
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:21:13