import 'dart:async'; import 'package:app_links/app_links.dart'; // 1. 替换导入 class SCDeepLinkHandler { // 2. 创建 AppLinks 实例(通常作为单例,但也可以每次创建) final AppLinks _ap = AppLinks(); StreamSubscription? _lss; // 注意流类型变为 Uri final _lnc = StreamController.broadcast(); Stream get linkNotifierStream => _lnc.stream; Function(Uri)? _olrc; Future initDeepLinks({Function(Uri)? onLinkReceived}) async { _olrc = onLinkReceived; await _iln(); _sl(); } Future _iln() async { try { // 3. 使用实例方法获取初始链接,返回 Uri? 而不是 String? Uri? initialLink = await _ap.getInitialLink(); if (initialLink != null) { _ph(initialLink); } } catch (err) { print('获取初始链接失败: $err'); } } void _sl() { // 4. 使用 uriLinkStream 监听链接(流类型为 Uri) _lss = _ap.uriLinkStream.listen( (Uri? link) { // 注意:uriLinkStream 可能直接发出 Uri,而不是 String? // 根据实际版本,可能是 Uri 或 String?,以下处理两者兼容 if (link != null) { _ph(link); } }, onError: (err) { print('监听链接流出错: $err'); }, ); } // 5. 接收 Uri 类型参数(原来接收 String) void _ph(Uri uri) { print('SCDeepLinkHandler 处理链接: $uri'); // 如果需要存储为字符串,可以使用 uri.toString() _lnc.add(uri.toString()); _olrc?.call(uri); } void dispose() { _lss?.cancel(); _lnc.close(); } }