From e6d015a2bc83c228185dd82c82e7695fc9781e45 Mon Sep 17 00:00:00 2001 From: wgh19 Date: Fri, 31 May 2024 11:45:54 +0800 Subject: [PATCH] deep link for android --- android/app/src/main/AndroidManifest.xml | 9 ++++++ lib/pages/illust_page.dart | 2 +- lib/utils/app_links.dart | 37 +++++++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index be92bef..eda8cc3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -33,6 +33,15 @@ + + + + + + + + + diff --git a/lib/pages/illust_page.dart b/lib/pages/illust_page.dart index 64f5eaa..fe3ad4e 100644 --- a/lib/pages/illust_page.dart +++ b/lib/pages/illust_page.dart @@ -981,7 +981,7 @@ class _BottomBarState extends State<_BottomBar> with TickerProviderStateMixin { ).fixWidth(96), Button( onPressed: () { - var text = "https://pixiv.net/artworks/${widget.illust.id}"; + var text = "https://www.pixiv.net/artworks/${widget.illust.id}"; Clipboard.setData(ClipboardData(text: text)); showToast(context, message: "Copied".tl); }, diff --git a/lib/utils/app_links.dart b/lib/utils/app_links.dart index 8495e40..4e8d501 100644 --- a/lib/utils/app_links.dart +++ b/lib/utils/app_links.dart @@ -5,7 +5,9 @@ import 'package:pixes/foundation/app.dart'; import 'package:pixes/foundation/log.dart'; import 'package:pixes/pages/illust_page.dart'; import 'package:pixes/pages/novel_page.dart'; +import 'package:pixes/pages/search_page.dart'; import 'package:pixes/pages/user_info_page.dart'; +import 'package:pixes/utils/ext.dart'; import 'package:win32_registry/win32_registry.dart'; Future _register(String scheme) async { @@ -31,11 +33,17 @@ Future _register(String scheme) async { bool Function(Uri uri)? onLink; +bool _firstLink = true; + void handleLinks() async { if (App.isWindows) { await _register("pixiv"); } - AppLinks().uriLinkStream.listen((uri) { + AppLinks().uriLinkStream.listen((uri) async { + if (_firstLink) { + await Future.delayed(const Duration(milliseconds: 200)); + } + _firstLink = false; Log.info("App Link", uri.toString()); if (onLink?.call(uri) == true) { return; @@ -70,6 +78,33 @@ bool handleLink(Uri uri) { } } return false; + } else if (uri.scheme == "https") { + var path = uri.toString().split("/").sublist(3); + switch (path[0]) { + case "users": + if (path.length >= 2) { + App.mainNavigatorKey?.currentContext?.to(() => UserInfoPage(path[1])); + return true; + } + case "novel": + if (path.length == 2) { + App.mainNavigatorKey?.currentContext + ?.to(() => NovelPageWithId(path[1].nums)); + return true; + } + case "artworks": + if (path.length == 2) { + App.mainNavigatorKey?.currentContext + ?.to(() => IllustPageWithId(path[1])); + return true; + } + case "tags": + if (path.length == 2) { + App.mainNavigatorKey?.currentContext + ?.to(() => SearchResultPage(path[1])); + return true; + } + } } return false; }