🚀 v1.6.4

This commit is contained in:
niuhuan 2023-01-31 18:50:51 +08:00
parent 718fbfcccf
commit 4f2c4ec90d
34 changed files with 155 additions and 116 deletions

View File

@ -48,40 +48,38 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="pika" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="pika" />
<data
android:mimeType="*/*"
android:pathPattern=".*\\.pkz"
android:scheme="content" />
<data
android:mimeType="*/*"
android:pathPattern=".*\\.pkz"
android:scheme="file" />
<data
android:mimeType="*/*"
android:pathPattern=".*\\.pki"
android:scheme="content" />
<data
android:mimeType="*/*"
android:pathPattern=".*\\.pki"
android:scheme="file" />
<data
android:mimeType="*/*"
android:pathPattern=".*\\.zip"
android:scheme="content" />
<data
android:mimeType="*/*"
android:pathPattern=".*\\.zip"
android:scheme="file" />
<data android:scheme="content" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.pkz" />
<data android:host="*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.pki" />
<data android:host="*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.zip" />
<data android:host="*" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.

View File

@ -1 +1 @@
v1.6.1
v1.6.4

View File

@ -1,5 +1,6 @@
v1.6.2
v1.6.4
- [x] ♻使用分流1和CDN-3分流进行直连
- [x] ♻升级flutter
- [x] 🚀下载支持搜索
- [x] ✨去掉UI动画的选项 (对阅读器友好)
- [x] ♻️去掉无用文件关联
- [x] ✨安卓支持 pika://comic/id 模式分享链接 (ios早已支持)
- [x] 🚀优化安卓配置文件

View File

@ -9,6 +9,7 @@ import 'package:uri_to_file/uri_to_file.dart';
import '../screens/ComicInfoScreen.dart';
import '../screens/DownloadOnlyImportScreen.dart';
import '../screens/PkzArchiveScreen.dart';
import 'config/IconLoading.dart';
import 'config/TimeOffsetHour.dart';
///
@ -304,14 +305,14 @@ StreamSubscription<String?> linkSubscript(BuildContext context) {
.first
.group(1)!;
Navigator.of(context).push(
MaterialPageRoute(
mixRoute(
builder: (BuildContext context) => ComicInfoScreen(comicId: comicId),
),
);
} else if (RegExp(r"^.*\.pkz$").allMatches(uri).isNotEmpty) {
File file = await toFile(uri);
Navigator.of(context).push(
MaterialPageRoute(
mixRoute(
builder: (BuildContext context) =>
PkzArchiveScreen(pkzPath: file.path),
),
@ -319,7 +320,7 @@ StreamSubscription<String?> linkSubscript(BuildContext context) {
} else if (RegExp(r"^.*\.((pki)|(zip))$").allMatches(uri).isNotEmpty) {
File file = await toFile(uri);
Navigator.of(context).push(
MaterialPageRoute(
mixRoute(
builder: (BuildContext context) =>
DownloadOnlyImportScreen(path: file.path),
),

View File

@ -2,6 +2,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:pikapika/basic/config/IconLoading.dart';
//
// (await Navigator.push pushReplacement时结束阻塞)
@ -37,12 +38,12 @@ Future<dynamic> navPushOrReplace(
if (_depth < _depthMax) {
return Navigator.push(
context,
MaterialPageRoute(builder: builder),
mixRoute(builder: builder),
);
} else {
return Navigator.pushReplacement(
context,
MaterialPageRoute(builder: builder),
mixRoute(builder: builder),
);
}
}

View File

@ -9,8 +9,7 @@ const _propertyName = "iconLoading";
late bool _iconLoading;
Future<void> initIconLoading() async {
_iconLoading =
(await method.loadProperty(_propertyName, "false")) == "true";
_iconLoading = (await method.loadProperty(_propertyName, "false")) == "true";
}
bool currentIconLoading() {
@ -19,7 +18,7 @@ bool currentIconLoading() {
Future<void> _chooseIconLoading(BuildContext context) async {
String? result =
await chooseListDialog<String>(context, "使用静态图标代替加载动画", ["", ""]);
await chooseListDialog<String>(context, "尽量减少UI动画", ["", ""]);
if (result != null) {
var target = result == "";
await method.saveProperty(_propertyName, "$target");
@ -31,7 +30,7 @@ Widget iconLoadingSetting() {
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return ListTile(
title: const Text("使用静态图标代替加载动画"),
title: const Text("尽量减少UI动画"),
subtitle: Text(_iconLoading ? "" : ""),
onTap: () async {
await _chooseIconLoading(context);
@ -41,3 +40,14 @@ Widget iconLoadingSetting() {
},
);
}
Route<T> mixRoute<T>({required WidgetBuilder builder}) {
if (currentIconLoading()) {
return PageRouteBuilder(
pageBuilder: (context, animation1, animation2) => builder.call(context),
transitionDuration: Duration.zero,
reverseTransitionDuration: Duration.zero,
);
}
return MaterialPageRoute(builder: builder);
}

View File

@ -13,6 +13,7 @@ import 'package:pikapika/screens/RegisterScreen.dart';
import 'package:pikapika/screens/SettingsScreen.dart';
import 'package:pikapika/screens/components/NetworkSetting.dart';
import '../basic/config/IconLoading.dart';
import '../basic/config/Version.dart';
import 'AppScreen.dart';
import 'DownloadListScreen.dart';
@ -88,7 +89,7 @@ class _AccountScreenState extends State<AccountScreen> {
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const SettingsScreen(
hiddenAccountInfo: true,
),
@ -101,7 +102,7 @@ class _AccountScreenState extends State<AccountScreen> {
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const AboutScreen(
),
),
@ -114,7 +115,7 @@ class _AccountScreenState extends State<AccountScreen> {
if (androidNightModeDisplay) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ThemeScreen()),
mixRoute(builder: (context) => const ThemeScreen()),
);
} else {
chooseLightTheme(context);
@ -186,7 +187,7 @@ class _AccountScreenState extends State<AccountScreen> {
recognizer: TapGestureRecognizer()
..onTap = () => Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (BuildContext context) =>
const RegisterScreen()),
).then((value) => _loadProperties()),
@ -209,7 +210,7 @@ class _AccountScreenState extends State<AccountScreen> {
await reloadIsPro();
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const AppScreen()),
mixRoute(builder: (context) => const AppScreen()),
);
} catch (e, s) {
print("$e\n$s");
@ -239,7 +240,7 @@ class _AccountScreenState extends State<AccountScreen> {
_toDownloadList() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const DownloadListScreen()),
mixRoute(builder: (context) => const DownloadListScreen()),
);
}
}

View File

@ -12,6 +12,7 @@ import 'package:pikapika/screens/SearchScreen.dart';
import 'package:pikapika/screens/components/ContentError.dart';
import 'package:pikapika/basic/Method.dart';
import '../basic/config/CategoriesColumnCount.dart';
import '../basic/config/IconLoading.dart';
import 'ComicsScreen.dart';
import 'GamesScreen.dart';
import 'RandomComicsScreen.dart';
@ -35,7 +36,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
if (value.isNotEmpty) {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => SearchScreen(keyword: value),
),
);
@ -211,7 +212,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
() {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const ComicCollectionsScreen(),
),
);
@ -300,7 +301,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const RankingsScreen()),
mixRoute(builder: (context) => const RankingsScreen()),
);
},
);
@ -312,7 +313,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const RandomComicsScreen()),
mixRoute(builder: (context) => const RandomComicsScreen()),
);
},
);
@ -324,7 +325,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const GamesScreen()),
mixRoute(builder: (context) => const GamesScreen()),
);
},
);
@ -335,7 +336,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
void _navigateToCategory(String? categoryTitle) {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => ComicsScreen(category: categoryTitle),
),
);

View File

@ -11,6 +11,7 @@ import 'package:pikapika/screens/components/CommentMainType.dart';
import 'package:pikapika/screens/components/ItemBuilder.dart';
import 'package:pikapika/screens/components/Recommendation.dart';
import '../basic/config/IconLoading.dart';
import 'ComicReaderScreen.dart';
import 'DownloadConfirmScreen.dart';
import 'components/ComicDescriptionCard.dart';
@ -285,7 +286,7 @@ class _ComicInfoScreenState extends State<ComicInfoScreen> with RouteAware {
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadConfirmScreen(
comicInfo: _comicInfo,
epList: _epList.reversed.toList(),
@ -356,7 +357,7 @@ class _ComicInfoScreenState extends State<ComicInfoScreen> with RouteAware {
void _push(ComicInfo comicInfo, List<Ep> epList, int order, int? rank) {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => ComicReaderScreen(
comicInfo: comicInfo,
epList: epList,

View File

@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
import 'package:pikapika/basic/config/Quality.dart';
import 'package:pikapika/screens/components/ContentError.dart';
import 'package:pikapika/screens/components/ContentLoading.dart';
import '../basic/config/IconLoading.dart';
import 'DownloadConfirmScreen.dart';
import 'components/ImageReader.dart';
import 'components/RightClickPop.dart';
@ -86,7 +87,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
if (orderMap.containsKey(epOrder)) {
_replacement = true;
Navigator.of(context).pushReplacement(
MaterialPageRoute(
mixRoute(
builder: (context) => ComicReaderScreen(
comicInfo: widget.comicInfo,
epList: widget.epList,
@ -100,7 +101,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
FutureOr<dynamic> _onReloadEp() {
_replacement = true;
Navigator.of(context).pushReplacement(MaterialPageRoute(
Navigator.of(context).pushReplacement(mixRoute(
builder: (context) => ComicReaderScreen(
comicInfo: widget.comicInfo,
epList: widget.epList,
@ -115,7 +116,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
FutureOr<dynamic> _onDownload() {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadConfirmScreen(
comicInfo: widget.comicInfo,
epList: widget.epList.reversed.toList(),

View File

@ -7,6 +7,7 @@ import 'package:pikapika/basic/store/Categories.dart';
import 'package:pikapika/basic/config/ListLayout.dart';
import 'package:pikapika/basic/Method.dart';
import '../basic/Entities.dart';
import '../basic/config/IconLoading.dart';
import 'SearchScreen.dart';
import 'components/ComicPager.dart';
import 'components/RightClickPop.dart';
@ -41,7 +42,7 @@ class _ComicsScreenState extends State<ComicsScreen> {
if (value.isNotEmpty) {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) =>
SearchScreen(keyword: value, category: widget.category),
),
@ -84,7 +85,7 @@ class _ComicsScreenState extends State<ComicsScreen> {
if (category == categoryTitle(null)) {
category = null;
}
Navigator.of(context).pushReplacement(MaterialPageRoute(
Navigator.of(context).pushReplacement(mixRoute(
builder: (context) {
return ComicsScreen(
category: category,

View File

@ -3,6 +3,7 @@ import 'package:pikapika/basic/Common.dart';
import '../basic/Entities.dart';
import '../basic/Method.dart';
import '../basic/config/IconLoading.dart';
import 'DownloadExportingGroupScreen.dart';
import 'components/ContentLoading.dart';
import 'components/DownloadInfoCard.dart';
@ -104,7 +105,10 @@ class _DownloadExportGroupScreenState extends State<DownloadExportGroupScreen> {
selected.contains(e.id)
? Icons.check_circle_sharp
: Icons.circle_outlined,
color: Theme.of(context).colorScheme.secondary,
color: Theme
.of(context)
.colorScheme
.secondary,
),
),
]),
@ -151,10 +155,11 @@ class _DownloadExportGroupScreenState extends State<DownloadExportGroupScreen> {
return;
}
final exported = await Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => DownloadExportingGroupScreen(
idList: selected,
),
mixRoute(
builder: (context) =>
DownloadExportingGroupScreen(
idList: selected,
),
),
);
},

View File

@ -11,6 +11,7 @@ import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/basic/config/ExportRename.dart';
import 'package:pikapika/screens/DownloadExportToSocketScreen.dart';
import '../basic/config/IconLoading.dart';
import 'components/ContentError.dart';
import 'components/ContentLoading.dart';
import 'components/DownloadInfoCard.dart';
@ -111,7 +112,7 @@ class _DownloadExportToFileScreenState
MaterialButton(
onPressed: () async {
Navigator.of(context).push(
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadExportToSocketScreen(
task: _task,
comicId: widget.comicId,

View File

@ -9,6 +9,7 @@ import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/basic/config/ChooserRoot.dart';
import '../basic/Cross.dart';
import '../basic/config/IconLoading.dart';
import '../basic/config/IsPro.dart';
import 'PkzArchiveScreen.dart';
import 'components/ContentLoading.dart';
@ -120,7 +121,7 @@ class _DownloadImportScreenState extends State<DownloadImportScreen> {
if (path != null) {
if (path.endsWith(".pkz")) {
Navigator.of(context).push(
MaterialPageRoute(
mixRoute(
builder: (BuildContext context) =>
PkzArchiveScreen(pkzPath: path!),
),

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/basic/Navigator.dart';
import 'package:pikapika/basic/Method.dart';
import '../basic/config/IconLoading.dart';
import '../basic/config/ShowCommentAtDownload.dart';
import 'ComicInfoScreen.dart';
import 'DownloadExportToFileScreen.dart';
@ -78,7 +79,7 @@ class _DownloadInfoScreenState extends State<DownloadInfoScreen>
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadExportToFileScreen(
comicId: widget.comicId,
comicTitle: widget.comicTitle,
@ -92,7 +93,7 @@ class _DownloadInfoScreenState extends State<DownloadInfoScreen>
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => ComicInfoScreen(
comicId: widget.comicId,
),
@ -224,7 +225,7 @@ class _DownloadInfoScreenState extends State<DownloadInfoScreen>
) {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadReaderScreen(
comicInfo: _task,
epList: _epList,

View File

@ -8,6 +8,7 @@ import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/screens/DownloadExportGroupScreen.dart';
import '../basic/config/IconLoading.dart';
import 'DownloadImportScreen.dart';
import 'DownloadInfoScreen.dart';
import 'components/ContentLoading.dart';
@ -143,7 +144,7 @@ class _DownloadListScreenState extends State<DownloadListScreen> {
}
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadInfoScreen(
comicId: e.id,
comicTitle: e.title,
@ -170,7 +171,7 @@ class _DownloadListScreenState extends State<DownloadListScreen> {
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const DownloadExportGroupScreen(),
),
);
@ -197,7 +198,7 @@ class _DownloadListScreenState extends State<DownloadListScreen> {
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const DownloadImportScreen(),
),
);

View File

@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
import 'package:pikapika/basic/config/ReaderDirection.dart';
import 'package:pikapika/basic/config/ReaderType.dart';
import 'package:pikapika/basic/Method.dart';
import '../basic/config/IconLoading.dart';
import 'components/ContentError.dart';
import 'components/ContentLoading.dart';
import 'components/ImageReader.dart';
@ -87,7 +88,7 @@ class _DownloadReaderScreenState extends State<DownloadReaderScreen> {
if (orderMap.containsKey(epOrder)) {
_replacement = true;
Navigator.of(context).pushReplacement(
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadReaderScreen(
comicInfo: widget.comicInfo,
epList: widget.epList,
@ -102,7 +103,7 @@ class _DownloadReaderScreenState extends State<DownloadReaderScreen> {
FutureOr<dynamic> _onReloadEp() {
_replacement = true;
Navigator.of(context).pushReplacement(
MaterialPageRoute(
mixRoute(
builder: (context) => DownloadReaderScreen(
comicInfo: widget.comicInfo,
epList: widget.epList,

View File

@ -6,6 +6,7 @@ import 'package:pikapika/screens/components/ContentError.dart';
import 'package:pikapika/screens/components/ContentLoading.dart';
import 'package:pikapika/screens/components/Images.dart';
import '../basic/config/IconLoading.dart';
import 'GameDownloadScreen.dart';
import 'components/CommentList.dart';
import 'components/GameTitleCard.dart';
@ -97,7 +98,7 @@ class _GameInfoScreenState extends State<GameInfoScreen> {
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => GameDownloadScreen(info),
),
);

View File

@ -4,6 +4,7 @@ import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/screens/components/ContentBuilder.dart';
import '../basic/config/IconLoading.dart';
import 'GameInfoScreen.dart';
import 'components/Images.dart';
import 'components/RightClickPop.dart';
@ -222,7 +223,7 @@ class GameCard extends StatelessWidget {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => GameInfoScreen(info.id)),
);
},

View File

@ -124,14 +124,14 @@ class _InitScreenState extends State<InitScreen> {
if (initUrl != null) {
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(
Navigator.of(context).pushReplacement(mixRoute(
builder: (BuildContext context) =>
ComicInfoScreen(comicId: comicId, holdPkz: true),
));
return;
} else if (RegExp(r"^.*\.pkz$").allMatches(initUrl!).isNotEmpty) {
File file = await toFile(initUrl!);
Navigator.of(context).pushReplacement(MaterialPageRoute(
Navigator.of(context).pushReplacement(mixRoute(
builder: (BuildContext context) =>
PkzArchiveScreen(pkzPath: file.path, holdPkz: true),
));
@ -139,7 +139,7 @@ class _InitScreenState extends State<InitScreen> {
} else if (RegExp(r"^.*\.((pki)|(zip))$").allMatches(initUrl!).isNotEmpty) {
File file = await toFile(initUrl!);
Navigator.of(context).pushReplacement(
MaterialPageRoute(
mixRoute(
builder: (BuildContext context) =>
DownloadOnlyImportScreen(path: file.path, holdPkz: true),
),
@ -197,13 +197,13 @@ class _InitScreenState extends State<InitScreen> {
// token或username+password有效则直接进入登录好的界面
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const AppScreen()),
mixRoute(builder: (context) => const AppScreen()),
);
} else {
//
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const AccountScreen()),
mixRoute(builder: (context) => const AccountScreen()),
);
}
}

View File

@ -13,6 +13,7 @@ import 'package:uri_to_file/uri_to_file.dart';
import '../basic/Common.dart';
import '../basic/Navigator.dart';
import '../basic/config/IconLoading.dart';
import 'PkzComicInfoScreen.dart';
class PkzArchiveScreen extends StatefulWidget {
@ -80,7 +81,7 @@ class _PkzArchiveScreenState extends State<PkzArchiveScreen> with RouteAware {
}
_info = await method.pkzInfo(widget.pkzPath);
if (_info.comics.length == 1) {
Navigator.of(context).pushReplacement(MaterialPageRoute(
Navigator.of(context).pushReplacement(mixRoute(
builder: (BuildContext context) => PkzComicInfoScreen(
pkzPath: widget.pkzPath,
pkzComic: _info.comics.first,
@ -118,7 +119,7 @@ class _PkzArchiveScreenState extends State<PkzArchiveScreen> with RouteAware {
.map((e) => GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
Navigator.of(context).push(mixRoute(
builder: (BuildContext context) {
return PkzComicInfoScreen(
pkzComic: e,

View File

@ -11,6 +11,7 @@ import 'package:uri_to_file/uri_to_file.dart';
import '../basic/Common.dart';
import '../basic/Navigator.dart';
import '../basic/config/IconLoading.dart';
import 'PkzArchiveScreen.dart';
import 'components/PkzComicInfoCard.dart';
@ -89,7 +90,7 @@ class _PkzComicInfoScreenState extends State<PkzComicInfoScreen>
for (var chapter in volume.chapters) {
chapterButtons.add(MaterialButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
Navigator.of(context).push(mixRoute(
builder: (BuildContext context) {
return PkzReaderScreen(
comicInfo: widget.pkzComic,
@ -206,7 +207,7 @@ class _PkzComicInfoScreenState extends State<PkzComicInfoScreen>
child: MaterialButton(
onPressed: () {
if (chapters.containsKey(_log?.lastViewEpId)) {
Navigator.of(context).push(MaterialPageRoute(
Navigator.of(context).push(mixRoute(
builder: (BuildContext context) {
return PkzReaderScreen(
comicInfo: widget.pkzComic,
@ -218,7 +219,7 @@ class _PkzComicInfoScreenState extends State<PkzComicInfoScreen>
));
return;
}
Navigator.of(context).push(MaterialPageRoute(
Navigator.of(context).push(mixRoute(
builder: (BuildContext context) {
return PkzReaderScreen(
comicInfo: widget.pkzComic,

View File

@ -11,6 +11,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
import 'package:pikapika/basic/config/ReaderDirection.dart';
import 'package:pikapika/basic/config/ReaderType.dart';
import 'package:pikapika/basic/Method.dart';
import '../basic/config/IconLoading.dart';
import 'components/ContentError.dart';
import 'components/ContentLoading.dart';
import 'components/ImageReader.dart';
@ -127,7 +128,7 @@ class _PkzReaderScreenState extends State<PkzReaderScreen> {
final ep = widget.epList[epOrder];
_replacement = true;
Navigator.of(context).pushReplacement(
MaterialPageRoute(
mixRoute(
builder: (context) => PkzReaderScreen(
comicInfo: widget.comicInfo,
pkzPath: widget.pkzPath,
@ -141,7 +142,7 @@ class _PkzReaderScreenState extends State<PkzReaderScreen> {
FutureOr<dynamic> _onReloadEp() {
_replacement = true;
Navigator.of(context).pushReplacement(
MaterialPageRoute(
mixRoute(
builder: (context) => PkzReaderScreen(
comicInfo: widget.comicInfo,
currentEpId: widget.currentEpId,

View File

@ -7,6 +7,7 @@ import 'package:pikapika/basic/config/ListLayout.dart';
import 'package:pikapika/basic/Method.dart';
import 'package:pikapika/screens/components/RightClickPop.dart';
import '../basic/Entities.dart';
import '../basic/config/IconLoading.dart';
import 'components/ComicPager.dart';
//
@ -36,7 +37,7 @@ class _SearchScreenState extends State<SearchScreen> {
if (value.isNotEmpty) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => SearchScreen(
keyword: value,
category: widget.category,
@ -71,7 +72,7 @@ class _SearchScreenState extends State<SearchScreen> {
if (category == categoryTitle(null)) {
category = null;
}
Navigator.of(context).pushReplacement(MaterialPageRoute(
Navigator.of(context).pushReplacement(mixRoute(
builder: (context) {
return SearchScreen(
category: category,

View File

@ -67,7 +67,7 @@ class SettingsScreen extends StatelessWidget {
onTap: () async {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const ModifyPasswordScreen()),
);
},
@ -103,7 +103,7 @@ class SettingsScreen extends StatelessWidget {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const CleanScreen()),
mixRoute(builder: (context) => const CleanScreen()),
);
},
title: const Text('清除缓存'),
@ -147,7 +147,7 @@ class SettingsScreen extends StatelessWidget {
await confirmDialog(context, "文件迁移", "此功能菜单保存后, 需要重启程序, 您确认吗");
if (f) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) {
mixRoute(builder: (BuildContext context) {
return const MigrateScreen();
}),
(route) => false,

View File

@ -10,6 +10,7 @@ import 'package:pikapika/screens/ThemeScreen.dart';
import 'package:pikapika/screens/ViewLogsScreen.dart';
import 'package:pikapika/basic/Method.dart';
import '../basic/config/IconLoading.dart';
import '../basic/config/IsPro.dart';
import '../basic/config/Themes.dart';
import 'SettingsScreen.dart';
@ -58,7 +59,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
await method.setPassword("");
Navigator.pushReplacement(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const AccountScreen()),
);
}
@ -69,7 +70,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const AboutScreen()),
mixRoute(builder: (context) => const AboutScreen()),
);
},
icon: Badged(
@ -80,7 +81,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
IconButton(
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
.push(mixRoute(builder: (BuildContext context) {
return const ProScreen();
}));
},
@ -92,7 +93,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SettingsScreen()),
mixRoute(builder: (context) => const SettingsScreen()),
);
},
icon: const Icon(Icons.settings),
@ -109,7 +110,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
if (androidNightModeDisplay) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ThemeScreen()),
mixRoute(builder: (context) => const ThemeScreen()),
);
} else {
chooseLightTheme(context);
@ -122,7 +123,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const FavouritePaperScreen()),
);
},
@ -133,7 +134,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ViewLogsScreen()),
mixRoute(builder: (context) => const ViewLogsScreen()),
);
},
title: const Text('浏览记录'),
@ -143,7 +144,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => const DownloadListScreen()),
);
},
@ -154,7 +155,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ProScreen()),
mixRoute(builder: (context) => const ProScreen()),
);
},
title: const Text('发电'),
@ -164,7 +165,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const AboutScreen()),
mixRoute(builder: (context) => const AboutScreen()),
);
},
title: Badged(

View File

@ -7,6 +7,7 @@ import 'package:pikapika/screens/components/ComicInfoCard.dart';
import 'package:pikapika/screens/components/RightClickPop.dart';
import '../basic/Entities.dart';
import '../basic/config/IconLoading.dart';
import 'ComicInfoScreen.dart';
import 'components/Images.dart';
@ -159,7 +160,7 @@ class _ViewLogsScreenState extends State<ViewLogsScreen> {
void _chooseComic(String comicId) {
Navigator.push(
context,
MaterialPageRoute(
mixRoute(
builder: (context) => ComicInfoScreen(
comicId: comicId,
),

View File

@ -5,6 +5,7 @@ import 'package:pikapika/basic/Entities.dart' as e;
import 'package:pikapika/screens/CommentScreen.dart';
import 'package:pikapika/screens/components/ItemBuilder.dart';
import 'package:pikapika/basic/Method.dart';
import '../../basic/config/IconLoading.dart';
import 'CommentItem.dart';
import 'CommentMainType.dart';
@ -82,7 +83,7 @@ class _CommentListState extends State<CommentList> {
return InkWell(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
mixRoute(
builder: (context) =>
CommentScreen(widget.mainType, widget.mainId, comment),
),

View File

@ -23,6 +23,7 @@ import 'package:pikapika/basic/config/ReaderType.dart';
import 'package:pikapika/basic/config/VolumeController.dart';
import 'package:pikapika/screens/components/PkzImages.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../../basic/config/IconLoading.dart';
import '../FilePhotoViewScreen.dart';
import 'gesture_zoom_box.dart';
@ -1680,7 +1681,7 @@ class _GalleryReaderState extends _ImageReaderContentState {
case '预览图片':
try {
var file = await load();
Navigator.of(context).push(MaterialPageRoute(
Navigator.of(context).push(mixRoute(
builder: (context) => FilePhotoViewScreen(file),
));
} catch (e) {

View File

@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/ImageAddress.dart';
import 'dart:io';
import 'dart:ui' as ui show Codec;
import '../../basic/config/IconLoading.dart';
import '../FilePhotoViewScreen.dart';
//
@ -343,7 +344,7 @@ Widget buildFile(String file, double? width, double? height,
String? choose = await chooseListDialog(context, '请选择', ['预览图片', '保存图片']);
switch (choose) {
case '预览图片':
Navigator.of(context).push(MaterialPageRoute(
Navigator.of(context).push(mixRoute(
builder: (context) => FilePhotoViewScreen(file),
));
break;

View File

@ -3,6 +3,7 @@ import 'package:pikapika/basic/Entities.dart';
import 'package:pikapika/screens/ComicInfoScreen.dart';
import 'package:pikapika/basic/Method.dart';
import '../../basic/config/IconLoading.dart';
import 'ItemBuilder.dart';
import 'Images.dart';
@ -37,7 +38,7 @@ class _RecommendationState extends State<Recommendation> {
var i = 0;
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
mixRoute(
builder: (context) =>
ComicInfoScreen(comicId: e.id)),
(route) => i++ < 10);

View File

@ -13,6 +13,7 @@ import 'package:pikapika/screens/components/Avatar.dart';
import 'package:pikapika/screens/components/Images.dart';
import 'package:pikapika/screens/components/ItemBuilder.dart';
import '../../basic/config/IconLoading.dart';
import 'DesktopCropper.dart';
const double _cardHeight = 180;
@ -216,7 +217,7 @@ class _UserProfileCardState extends State<UserProfileCard> {
);
if (result != null) {
List<int>? buff = await Navigator.of(context).push(
MaterialPageRoute(builder: (BuildContext context) {
mixRoute(builder: (BuildContext context) {
return DesktopCropper(
file: result.files.first.path!,
aspectRatio: 1,

View File

@ -14,7 +14,7 @@ packages:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.5"
version: "3.3.6"
async:
dependency: transitive
description:
@ -543,7 +543,7 @@ packages:
name: url_launcher_windows
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.2"
version: "3.0.3"
vector_math:
dependency: transitive
description:

View File

@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.6.1+9
version: 1.6.4+10
environment:
sdk: ">=2.12.0 <3.0.0"