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
)