Padding slider iphone edge

This commit is contained in:
niuhuan 2022-07-04 10:02:09 +08:00
parent ad3964159c
commit ec96f238d9
7 changed files with 90 additions and 34 deletions

View File

@ -53,6 +53,8 @@
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="pika" />
<data <data
android:mimeType="*/*" android:mimeType="*/*"
android:pathPattern=".*\\.pkz" android:pathPattern=".*\\.pkz"

View File

@ -2,6 +2,15 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>pika</string>
</array>
</dict>
</array>
<key>CADisableMinimumFrameDurationOnPhone</key> <key>CADisableMinimumFrameDurationOnPhone</key>
<true/> <true/>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>

View File

@ -6,6 +6,7 @@ import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:uni_links/uni_links.dart'; import 'package:uni_links/uni_links.dart';
import 'package:uri_to_file/uri_to_file.dart'; import 'package:uri_to_file/uri_to_file.dart';
import '../screens/ComicInfoScreen.dart';
import '../screens/DownloadOnlyImportScreen.dart'; import '../screens/DownloadOnlyImportScreen.dart';
import '../screens/PkzArchiveScreen.dart'; import '../screens/PkzArchiveScreen.dart';
import 'config/TimeOffsetHour.dart'; import 'config/TimeOffsetHour.dart';
@ -297,7 +298,17 @@ Future<String?> inputString(BuildContext context, String title,
StreamSubscription<String?> linkSubscript(BuildContext context) { StreamSubscription<String?> linkSubscript(BuildContext context) {
return linkStream.listen((uri) async { return linkStream.listen((uri) async {
if (uri == null) return; if (uri == null) return;
if (RegExp(r"^.*\.pkz$").allMatches(uri).isNotEmpty) { if (RegExp(r"^pika://comic/([0-9A-z]+)/$").allMatches(uri).isNotEmpty) {
String comicId = RegExp(r"^pika://comic/([0-9A-z]+)/$")
.allMatches(uri)
.first
.group(1)!;
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => ComicInfoScreen(comicId: comicId),
),
);
} else if (RegExp(r"^.*\.pkz$").allMatches(uri).isNotEmpty) {
File file = await toFile(uri); File file = await toFile(uri);
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(

View File

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Cross.dart'; import 'package:pikapika/basic/Cross.dart';
@ -23,8 +25,10 @@ import 'components/RightClickPop.dart';
// //
class ComicInfoScreen extends StatefulWidget { class ComicInfoScreen extends StatefulWidget {
final String comicId; final String comicId;
final bool holdPkz;
const ComicInfoScreen({Key? key, required this.comicId}) : super(key: key); const ComicInfoScreen({Key? key, required this.comicId, this.holdPkz = false})
: super(key: key);
@override @override
State<StatefulWidget> createState() => _ComicInfoScreenState(); State<StatefulWidget> createState() => _ComicInfoScreenState();
@ -36,6 +40,7 @@ class _ComicInfoScreenState extends State<ComicInfoScreen> with RouteAware {
late Key _comicFutureKey = UniqueKey(); late Key _comicFutureKey = UniqueKey();
late Future<ViewLog?> _viewFuture = _loadViewLog(); late Future<ViewLog?> _viewFuture = _loadViewLog();
late Future<List<Ep>> _epListFuture = _loadEps(); late Future<List<Ep>> _epListFuture = _loadEps();
StreamSubscription<String?>? _linkSubscription;
Future<ComicInfo> _loadComic() async { Future<ComicInfo> _loadComic() async {
return await method.comicInfo(widget.comicId); return await method.comicInfo(widget.comicId);
@ -69,14 +74,23 @@ class _ComicInfoScreenState extends State<ComicInfoScreen> with RouteAware {
}); });
} }
@override
void initState() {
if (widget.holdPkz) {
_linkSubscription = linkSubscript(context);
}
super.initState();
}
@override @override
void dispose() { void dispose() {
_linkSubscription?.cancel();
routeObserver.unsubscribe(this); routeObserver.unsubscribe(this);
super.dispose(); super.dispose();
} }
@override @override
Widget build(BuildContext context){ Widget build(BuildContext context) {
return rightClickPop( return rightClickPop(
child: buildScreen(context), child: buildScreen(context),
context: context, context: context,

View File

@ -33,6 +33,7 @@ import 'package:pikapika/basic/config/UsingRightClickPop.dart';
import 'package:pikapika/basic/config/Version.dart'; import 'package:pikapika/basic/config/Version.dart';
import 'package:pikapika/basic/config/VolumeController.dart'; import 'package:pikapika/basic/config/VolumeController.dart';
import 'package:pikapika/basic/config/ShadowCategoriesMode.dart'; import 'package:pikapika/basic/config/ShadowCategoriesMode.dart';
import 'package:pikapika/screens/ComicInfoScreen.dart';
import 'package:pikapika/screens/PkzArchiveScreen.dart'; import 'package:pikapika/screens/PkzArchiveScreen.dart';
import 'package:uni_links/uni_links.dart'; import 'package:uni_links/uni_links.dart';
import 'package:uri_to_file/uri_to_file.dart'; import 'package:uri_to_file/uri_to_file.dart';
@ -107,7 +108,14 @@ class _InitScreenState extends State<InitScreen> {
} }
} }
if (initUrl != null) { if (initUrl != null) {
if (RegExp(r"^.*\.pkz$").allMatches(initUrl!).isNotEmpty) { if (RegExp(r"^pika://comic/([0-9A-z]+)/$").allMatches(initUrl!).isNotEmpty) {
String comicId = RegExp(r"^pika://comic/([0-9A-z]+)/$").allMatches(initUrl!).first.group(1)!;
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (BuildContext context) =>
ComicInfoScreen(comicId: comicId, holdPkz: true),
));
return;
} else if (RegExp(r"^.*\.pkz$").allMatches(initUrl!).isNotEmpty) {
File file = await toFile(initUrl!); File file = await toFile(initUrl!);
Navigator.of(context).pushReplacement(MaterialPageRoute( Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (BuildContext context) => builder: (BuildContext context) =>

View File

@ -104,14 +104,17 @@ class _KnightLeaderBoard extends StatefulWidget {
class _KnightLeaderBoardState extends State<_KnightLeaderBoard> { class _KnightLeaderBoardState extends State<_KnightLeaderBoard> {
Future<List<Knight>> _future = method.leaderboardOfKnight(); Future<List<Knight>> _future = method.leaderboardOfKnight();
Key _key = UniqueKey();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ContentBuilder( return ContentBuilder(
key: _key,
future: _future, future: _future,
onRefresh: () async { onRefresh: () async {
setState(() { setState(() {
_future = method.leaderboardOfKnight(); _future = method.leaderboardOfKnight();
_key = UniqueKey();
}); });
}, },
successBuilder: ( successBuilder: (

View File

@ -387,6 +387,15 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> {
], ],
), ),
), ),
widget.struct.fullScreen
? Container()
: Container(
color: const Color(0x88000000),
child: SafeArea(
top: false,
child: Container(),
),
),
], ],
); );
case ReaderSliderPosition.RIGHT: case ReaderSliderPosition.RIGHT: