import 'dart:convert'; import 'package:go_router/go_router.dart'; import 'app_router.dart'; /// 统一将 Scheme、Universal Link 和推送 payload 收敛为应用内路由。 abstract final class DeepLinkService { static void handle(String raw) { final target = _route(raw); if (target != null) rootNavigatorKey.currentContext?.go(target); } static String? _route(String raw) { var source = raw.trim(); try { final json = jsonDecode(source); if (json is Map) { source = '${json['deep_link'] ?? json['url'] ?? json['link'] ?? ''}'; } } catch (_) {} final uri = Uri.tryParse(source); if (uri == null) return null; if (uri.scheme == 'jinzhi') { final path = uri.path.isEmpty ? '/assets' : uri.path; return _allowed(path) ? '$path${uri.hasQuery ? '?${uri.query}' : ''}' : null; } if ((uri.scheme == 'https' || uri.scheme == 'http') && _allowed(uri.path)) { return '${uri.path}${uri.hasQuery ? '?${uri.query}' : ''}'; } return null; } static bool _allowed(String path) => const { '/assets', '/market', '/news', '/profile', '/settings', }.contains(path); }