From 1426771ec9cb208ec5d5e06fe643ea2bf0852f1d Mon Sep 17 00:00:00 2001 From: Kingtous Date: Tue, 7 Feb 2023 01:31:11 +0800 Subject: [PATCH] fix: uni links failed to be invoked with --cm running on macOS --- flutter/lib/common.dart | 16 +++++++++++++--- flutter/lib/main.dart | 8 +++++++- flutter/lib/models/native_model.dart | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 8236597ff..41043069a 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1292,14 +1292,24 @@ Future initUniLinks() async { } } -StreamSubscription? listenUniLinks() { - if (!(Platform.isWindows || Platform.isMacOS)) { +/// Listen for uni links. +/// +/// * handleByFlutter: Should uni links being handled by Flutter. +/// +/// Returns a [StreamSubscription] which can listen the uni links. +StreamSubscription? listenUniLinks({handleByFlutter = true}) { + if (Platform.isLinux) { return null; } final sub = uriLinkStream.listen((Uri? uri) { + debugPrint("A uri was received: $uri."); if (uri != null) { - callUniLinksUriHandler(uri); + if (handleByFlutter) { + callUniLinksUriHandler(uri); + } else { + bind.sendUrlScheme(url: uri.toString()); + } } else { print("uni listen error: uri is empty."); } diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index a2ae959c0..cc40d962f 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -31,6 +32,9 @@ int? kWindowId; WindowType? kWindowType; late List kBootArgs; +/// Uni links. +StreamSubscription? _uniLinkSubscription; + Future main(List args) async { WidgetsFlutterBinding.ensureInitialized(); debugPrint("launch args: $args"); @@ -203,7 +207,7 @@ void runMultiWindow( await restoreWindowPosition(WindowType.PortForward, windowId: kWindowId!); break; default: - // no such appType + // no such appType exit(0); } // show window from hidden status @@ -222,6 +226,8 @@ void runConnectionManagerScreen(bool hide) async { } else { showCmWindow(); } + // Start the uni links handler and redirect links to Native, not for Flutter. + _uniLinkSubscription = listenUniLinks(handleByFlutter: false); } void showCmWindow() { diff --git a/flutter/lib/models/native_model.dart b/flutter/lib/models/native_model.dart index d6885bfb0..628bf502d 100644 --- a/flutter/lib/models/native_model.dart +++ b/flutter/lib/models/native_model.dart @@ -117,7 +117,7 @@ class PlatformFFI { if (Platform.isLinux) { // Start a dbus service, no need to await _ffiBind.mainStartDbusServer(); - } else if (Platform.isMacOS) { + } else if (Platform.isMacOS && isMain) { // Start an ipc server for handling url schemes. _ffiBind.mainStartIpcUrlServer(); }