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

Android中WalletConnect Deeplink无法在Flutter应用内跳转指定页面

针对你遇到的问题,核心思路是解析wc:协议链接的参数,再根据业务逻辑触发GetX路由跳转,具体步骤如下:

1. 解析WalletConnect链接内容

Flutter的Uri类可以直接解析非HTTP协议的链接,提取其中的会话信息和查询参数:

// 示例链接,实际可替换为唤起时获取的deeplink内容
final wcLink = 'wc:35f76b10-19b5-4d16-8d2f-ac5d430be5e9@1?bridge=https%3A%2F%2F4.bridge.walletconnect.org&key=fc9f29c26cc97ad2c476f2f9ba953709d45db540aa1826cb62d3352d3f80bcaa';
final wcUri = Uri.parse(wcLink);

// 提取会话ID和版本号
final sessionParts = wcUri.path.split('@');
final sessionId = sessionParts[0]; // 35f76b10-19b5-4d16-8d2f-ac5d430be5e9
final version = sessionParts[1]; // 1

// 提取bridge和key参数
final bridge = wcUri.queryParameters['bridge'];
final key = wcUri.queryParameters['key'];

2. 触发GetX路由跳转

解析完成后,直接调用GetX的路由方法,将参数传递给目标页面:

// 假设钱包连接页面的路由名称为 '/wallet-connect'
Get.toNamed('/wallet-connect', arguments: {
  'sessionId': sessionId,
  'version': version,
  'bridge': bridge,
  'key': key,
});

3. 在目标页面接收参数

在跳转后的页面中,通过GetX获取传递的参数,用于初始化WalletConnect会话:

class WalletConnectPage extends StatelessWidget {
  const WalletConnectPage({super.key});

  @override
  Widget build(BuildContext context) {
    // 获取路由参数
    final args = Get.arguments as Map<String, dynamic>;
    final sessionId = args['sessionId'];
    final bridge = args['bridge'];
    
    // 后续可使用这些参数初始化WalletConnect连接
    return Scaffold(
      appBar: AppBar(title: const Text('钱包连接')),
      body: Center(child: Text('会话ID: $sessionId')),
    );
  }
}

4. 处理Deeplink唤起逻辑

确保项目已配置wc:协议的deeplink(Android修改AndroidManifest.xml,iOS修改Info.plist),然后在入口处处理冷/热启动的唤起事件:

void main() {
  runApp(const MyApp());
  // 处理冷启动时的deeplink
  WidgetsBinding.instance.addPostFrameCallback((_) {
    handleDeeplink();
  });
}

// 统一处理deeplink的方法
void handleDeeplink() async {
  // 依赖uni_links包获取deeplink,需在pubspec.yaml中添加依赖
  final initialLink = await getInitialLink();
  if (initialLink != null) {
    parseAndNavigate(initialLink);
  }
  // 监听热启动时的deeplink
  linkStream.listen((link) {
    if (link != null) {
      parseAndNavigate(link);
    }
  });
}

// 解析并跳转
void parseAndNavigate(String link) {
  if (link.startsWith('wc:')) {
    final wcUri = Uri.parse(link);
    final sessionParts = wcUri.path.split('@');
    final sessionId = sessionParts[0];
    final version = sessionParts[1];
    final bridge = wcUri.queryParameters['bridge'];
    final key = wcUri.queryParameters['key'];
    
    Get.toNamed('/wallet-connect', arguments: {
      'sessionId': sessionId,
      'version': version,
      'bridge': bridge,
      'key': key,
    });
  }
}

需要添加的依赖(pubspec.yaml):

dependencies:
  uni_links: ^0.5.1
  get: ^4.6.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:35:21