diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f77be5f..5050b1d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,6 +1,4 @@ PODS: - - app_links (0.0.1): - - Flutter - DKImagePickerController/Core (4.3.2): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource @@ -48,18 +46,20 @@ PODS: - SDWebImage/Core (5.12.5) - SwiftyGif (5.4.3) - TOCropViewController (2.6.1) + - uni_links (0.0.1): + - Flutter - uri_to_file (0.0.1): - Flutter - url_launcher_ios (0.0.1): - Flutter DEPENDENCIES: - - app_links (from `.symlinks/plugins/app_links/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - image_cropper (from `.symlinks/plugins/image_cropper/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - permission_handler (from `.symlinks/plugins/permission_handler/ios`) + - uni_links (from `.symlinks/plugins/uni_links/ios`) - uri_to_file (from `.symlinks/plugins/uri_to_file/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) @@ -72,8 +72,6 @@ SPEC REPOS: - TOCropViewController EXTERNAL SOURCES: - app_links: - :path: ".symlinks/plugins/app_links/ios" file_picker: :path: ".symlinks/plugins/file_picker/ios" Flutter: @@ -84,13 +82,14 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/image_picker_ios/ios" permission_handler: :path: ".symlinks/plugins/permission_handler/ios" + uni_links: + :path: ".symlinks/plugins/uni_links/ios" uri_to_file: :path: ".symlinks/plugins/uri_to_file/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - app_links: 8941e7bac086136bae70d619141c36f258f4381d DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 @@ -101,6 +100,7 @@ SPEC CHECKSUMS: SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 + uni_links: d97da20c7701486ba192624d99bffaaffcfc298a uri_to_file: c4726881848febf4806f0a5707bd12903e02b0f0 url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index d1dff17..21edc6e 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -17,10 +17,37 @@ Owner LSItemContentTypes + niuhuan.pkz pkz + UTExportedTypeDeclarations + + + UTTypeIdentifier + niuhuan.pkz + UTTypeConformsTo + + public.data + public.content + com.apple.package + + UTTypeDescription + PKZ Archive + UTTypeTagSpecification + + public.filename-extension + + pkz + + public.mime-type + + text/vnd.niuhuan.pkz + + + + CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/lib/screens/AccountScreen.dart b/lib/screens/AccountScreen.dart index f38380c..a71a74e 100644 --- a/lib/screens/AccountScreen.dart +++ b/lib/screens/AccountScreen.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:app_links/app_links.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:pikapika/basic/Common.dart'; @@ -11,6 +10,7 @@ import 'package:pikapika/basic/enum/ErrorTypes.dart'; import 'package:pikapika/screens/RegisterScreen.dart'; import 'package:pikapika/screens/SettingsScreen.dart'; import 'package:pikapika/screens/components/NetworkSetting.dart'; +import 'package:uni_links/uni_links.dart'; import 'package:uri_to_file/uri_to_file.dart'; import '../basic/Navigator.dart'; @@ -32,13 +32,13 @@ class _AccountScreenState extends State { late bool _logging = false; late String _username = ""; late String _password = ""; - late StreamSubscription _linkSubscription; + late StreamSubscription _linkSubscription; @override void initState() { - final appLinks = AppLinks(); // todo 不必要cancel 随机监听就好了, APP关闭时销毁, 考虑移动到APP里 - _linkSubscription = appLinks.uriLinkStream.listen((uri) async { + _linkSubscription = linkStream.listen((uri) async { + if (uri == null) return; RegExp regExp = RegExp(r"^.*\.pkz$"); final matches = regExp.allMatches(uri.toString()); if (matches.isNotEmpty) { diff --git a/lib/screens/AppScreen.dart b/lib/screens/AppScreen.dart index 3332b5a..8395ef2 100644 --- a/lib/screens/AppScreen.dart +++ b/lib/screens/AppScreen.dart @@ -1,10 +1,10 @@ import 'dart:async'; import 'dart:io'; -import 'package:app_links/app_links.dart'; import 'package:flutter/material.dart'; import 'package:pikapika/basic/config/Version.dart'; import 'package:pikapika/screens/components/Badge.dart'; +import 'package:uni_links/uni_links.dart'; import 'package:uri_to_file/uri_to_file.dart'; import 'CategoriesScreen.dart'; @@ -20,18 +20,18 @@ class AppScreen extends StatefulWidget { } class _AppScreenState extends State { - late StreamSubscription _linkSubscription; + late StreamSubscription _linkSubscription; @override void initState() { versionEvent.subscribe(_onVersion); - final appLinks = AppLinks(); // todo 不必要cancel 随机监听就好了, APP关闭时销毁, 考虑移动到APP里 - _linkSubscription = appLinks.uriLinkStream.listen((uri) async { + _linkSubscription = linkStream.listen((uri) async { + if (uri == null) return; RegExp regExp = RegExp(r"^.*\.pkz$"); - final matches = regExp.allMatches(uri.toString()); + final matches = regExp.allMatches(uri); if (matches.isNotEmpty) { - File file = await toFile(uri.toString()); + File file = await toFile(uri); Navigator.of(context).push(MaterialPageRoute( builder: (BuildContext context) => PkzArchiveScreen(pkzPath: file.path), diff --git a/lib/screens/InitScreen.dart b/lib/screens/InitScreen.dart index 3a6e98f..44080a6 100644 --- a/lib/screens/InitScreen.dart +++ b/lib/screens/InitScreen.dart @@ -34,7 +34,7 @@ import 'package:pikapika/basic/config/Version.dart'; import 'package:pikapika/basic/config/VolumeController.dart'; import 'package:pikapika/basic/config/ShadowCategoriesMode.dart'; import 'package:pikapika/screens/PkzArchiveScreen.dart'; -import 'package:app_links/app_links.dart'; +import 'package:uni_links/uni_links.dart'; import 'package:uri_to_file/uri_to_file.dart'; import '../basic/config/ExportRename.dart'; import 'AccountScreen.dart'; @@ -94,11 +94,10 @@ class _InitScreenState extends State { await initAuthentication(); autoCheckNewVersion(); - final appLinks = AppLinks(); String? initUrl; if (Platform.isAndroid || Platform.isIOS) { try { - initUrl = (await appLinks.getInitialAppLink())?.toString(); + initUrl = (await getInitialUri())?.toString(); // Use the uri and warn the user, if it is not correct, // but keep in mind it could be `null`. } on FormatException { diff --git a/lib/screens/PkzArchiveScreen.dart b/lib/screens/PkzArchiveScreen.dart index 7aeb014..21a6081 100644 --- a/lib/screens/PkzArchiveScreen.dart +++ b/lib/screens/PkzArchiveScreen.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:app_links/app_links.dart'; import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; import 'package:permission_handler/permission_handler.dart'; @@ -9,6 +8,7 @@ import 'package:pikapika/basic/Entities.dart'; import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/screens/components/ContentBuilder.dart'; import 'package:pikapika/screens/components/PkzComicInfoCard.dart'; +import 'package:uni_links/uni_links.dart'; import 'package:uri_to_file/uri_to_file.dart'; import '../basic/Navigator.dart'; @@ -33,18 +33,18 @@ class _PkzArchiveScreenState extends State with RouteAware { late String _fileName; late Future _future; late PkzArchive _info; - StreamSubscription? _linkSubscription; + StreamSubscription? _linkSubscription; @override void initState() { if (widget.holdPkz) { - final appLinks = AppLinks(); // todo 不必要cancel 随机监听就好了, APP关闭时销毁, 考虑移动到APP里 - _linkSubscription = appLinks.uriLinkStream.listen((uri) async { + _linkSubscription = linkStream.listen((uri) async { + if(uri == null) return; RegExp regExp = RegExp(r"^.*\.pkz$"); - final matches = regExp.allMatches(uri.toString()); + final matches = regExp.allMatches(uri); if (matches.isNotEmpty) { - File file = await toFile(uri.toString()); + File file = await toFile(uri); Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => @@ -95,7 +95,7 @@ class _PkzArchiveScreenState extends State with RouteAware { builder: (BuildContext context) => PkzComicInfoScreen( pkzPath: widget.pkzPath, pkzComic: _info.comics.first, - holdPkz: true, + holdPkz: widget.holdPkz, ), )); } diff --git a/lib/screens/PkzComicInfoScreen.dart b/lib/screens/PkzComicInfoScreen.dart index ef44bbf..dc6d9f9 100644 --- a/lib/screens/PkzComicInfoScreen.dart +++ b/lib/screens/PkzComicInfoScreen.dart @@ -1,12 +1,12 @@ import 'dart:async'; import 'dart:io'; -import 'package:app_links/app_links.dart'; import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; import 'package:pikapika/basic/Entities.dart'; import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/screens/PkzReaderScreen.dart'; +import 'package:uni_links/uni_links.dart'; import 'package:uri_to_file/uri_to_file.dart'; import '../basic/Navigator.dart'; @@ -32,18 +32,18 @@ class PkzComicInfoScreen extends StatefulWidget { class _PkzComicInfoScreenState extends State with RouteAware { PkzComicViewLog? _log; - StreamSubscription? _linkSubscription; + StreamSubscription? _linkSubscription; @override void initState() { if (widget.holdPkz) { - final appLinks = AppLinks(); // todo 不必要cancel 随机监听就好了, APP关闭时销毁, 考虑移动到APP里 - _linkSubscription = appLinks.uriLinkStream.listen((uri) async { + _linkSubscription = linkStream.listen((uri) async { + if (uri == null) return; RegExp regExp = RegExp(r"^.*\.pkz$"); - final matches = regExp.allMatches(uri.toString()); + final matches = regExp.allMatches(uri); if (matches.isNotEmpty) { - File file = await toFile(uri.toString()); + File file = await toFile(uri); Navigator.of(context).push(MaterialPageRoute( builder: (BuildContext context) => PkzArchiveScreen(pkzPath: file.path), diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index a1eb7ee..8236f57 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,10 +5,8 @@ import FlutterMacOS import Foundation -import app_links_macos import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index f4dc71f..85febac 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -8,41 +8,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.1+2" - app_links: - dependency: "direct main" - description: - name: app_links - url: "https://pub.dartlang.org" - source: hosted - version: "3.2.0" - app_links_macos: - dependency: transitive - description: - name: app_links_macos - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.0" - app_links_platform_interface: - dependency: transitive - description: - name: app_links_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.2" - app_links_web: - dependency: transitive - description: - name: app_links_web - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.0" - app_links_windows: - dependency: transitive - description: - name: app_links_windows - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.0" archive: dependency: transitive description: @@ -467,6 +432,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.1" + uni_links: + dependency: "direct main" + description: + name: uni_links + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.1" + uni_links_platform_interface: + dependency: transitive + description: + name: uni_links_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + uni_links_web: + dependency: transitive + description: + name: uni_links_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" uri_to_file: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index c667fc8..cd4847f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,8 +48,8 @@ dependencies: crop_image: ^1.0.2 image: ^3.1.3 path: ^1.8.0 - app_links: ^3.2.0 uri_to_file: ^0.2.0 + uni_links: ^0.5.1 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 96d0d6d..4f78848 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,12 +6,9 @@ #include "generated_plugin_registrant.h" -#include #include void RegisterPlugins(flutter::PluginRegistry* registry) { - AppLinksWindowsPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("AppLinksWindowsPlugin")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 9a732f7..88b22e5 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - app_links_windows url_launcher_windows )