🚀 v1.6.4
This commit is contained in:
parent
718fbfcccf
commit
4f2c4ec90d
|
@ -48,40 +48,38 @@
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</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>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<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="content" />
|
||||||
<data android:scheme="pika" />
|
<data android:mimeType="*/*" />
|
||||||
|
<data android:pathPattern=".*\\.pkz" />
|
||||||
<data
|
<data android:host="*" />
|
||||||
android:mimeType="*/*"
|
</intent-filter>
|
||||||
android:pathPattern=".*\\.pkz"
|
<intent-filter>
|
||||||
android:scheme="content" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<data
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
android:mimeType="*/*"
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
android:pathPattern=".*\\.pkz"
|
<data android:scheme="content" />
|
||||||
android:scheme="file" />
|
<data android:mimeType="*/*" />
|
||||||
|
<data android:pathPattern=".*\\.pki" />
|
||||||
<data
|
<data android:host="*" />
|
||||||
android:mimeType="*/*"
|
</intent-filter>
|
||||||
android:pathPattern=".*\\.pki"
|
<intent-filter>
|
||||||
android:scheme="content" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<data
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
android:mimeType="*/*"
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
android:pathPattern=".*\\.pki"
|
<data android:scheme="content" />
|
||||||
android:scheme="file" />
|
<data android:mimeType="*/*" />
|
||||||
|
<data android:pathPattern=".*\\.zip" />
|
||||||
<data
|
<data android:host="*" />
|
||||||
android:mimeType="*/*"
|
|
||||||
android:pathPattern=".*\\.zip"
|
|
||||||
android:scheme="content" />
|
|
||||||
<data
|
|
||||||
android:mimeType="*/*"
|
|
||||||
android:pathPattern=".*\\.zip"
|
|
||||||
android:scheme="file" />
|
|
||||||
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
<!-- Don't delete the meta-data below.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
v1.6.1
|
v1.6.4
|
|
@ -1,5 +1,6 @@
|
||||||
v1.6.2
|
v1.6.4
|
||||||
|
|
||||||
- [x] ♻️使用分流1和CDN-3分流进行直连
|
- [x] ✨️去掉UI动画的选项 (对阅读器友好)
|
||||||
- [x] ♻️升级flutter
|
- [x] ♻️去掉无用文件关联
|
||||||
- [x] 🚀下载支持搜索
|
- [x] ✨安卓支持 pika://comic/id 模式分享链接 (ios早已支持)
|
||||||
|
- [x] 🚀优化安卓配置文件
|
||||||
|
|
|
@ -9,6 +9,7 @@ import 'package:uri_to_file/uri_to_file.dart';
|
||||||
import '../screens/ComicInfoScreen.dart';
|
import '../screens/ComicInfoScreen.dart';
|
||||||
import '../screens/DownloadOnlyImportScreen.dart';
|
import '../screens/DownloadOnlyImportScreen.dart';
|
||||||
import '../screens/PkzArchiveScreen.dart';
|
import '../screens/PkzArchiveScreen.dart';
|
||||||
|
import 'config/IconLoading.dart';
|
||||||
import 'config/TimeOffsetHour.dart';
|
import 'config/TimeOffsetHour.dart';
|
||||||
|
|
||||||
/// 默认的图片尺寸
|
/// 默认的图片尺寸
|
||||||
|
@ -304,14 +305,14 @@ StreamSubscription<String?> linkSubscript(BuildContext context) {
|
||||||
.first
|
.first
|
||||||
.group(1)!;
|
.group(1)!;
|
||||||
Navigator.of(context).push(
|
Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (BuildContext context) => ComicInfoScreen(comicId: comicId),
|
builder: (BuildContext context) => ComicInfoScreen(comicId: comicId),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else if (RegExp(r"^.*\.pkz$").allMatches(uri).isNotEmpty) {
|
} 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(
|
mixRoute(
|
||||||
builder: (BuildContext context) =>
|
builder: (BuildContext context) =>
|
||||||
PkzArchiveScreen(pkzPath: file.path),
|
PkzArchiveScreen(pkzPath: file.path),
|
||||||
),
|
),
|
||||||
|
@ -319,7 +320,7 @@ StreamSubscription<String?> linkSubscript(BuildContext context) {
|
||||||
} else if (RegExp(r"^.*\.((pki)|(zip))$").allMatches(uri).isNotEmpty) {
|
} else if (RegExp(r"^.*\.((pki)|(zip))$").allMatches(uri).isNotEmpty) {
|
||||||
File file = await toFile(uri);
|
File file = await toFile(uri);
|
||||||
Navigator.of(context).push(
|
Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (BuildContext context) =>
|
builder: (BuildContext context) =>
|
||||||
DownloadOnlyImportScreen(path: file.path),
|
DownloadOnlyImportScreen(path: file.path),
|
||||||
),
|
),
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:pikapika/basic/config/IconLoading.dart';
|
||||||
|
|
||||||
// 用于监听返回到当前页面的事件
|
// 用于监听返回到当前页面的事件
|
||||||
// (await Navigator.push 会在子页面pushReplacement时结束阻塞)
|
// (await Navigator.push 会在子页面pushReplacement时结束阻塞)
|
||||||
|
@ -37,12 +38,12 @@ Future<dynamic> navPushOrReplace(
|
||||||
if (_depth < _depthMax) {
|
if (_depth < _depthMax) {
|
||||||
return Navigator.push(
|
return Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: builder),
|
mixRoute(builder: builder),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return Navigator.pushReplacement(
|
return Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: builder),
|
mixRoute(builder: builder),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,7 @@ const _propertyName = "iconLoading";
|
||||||
late bool _iconLoading;
|
late bool _iconLoading;
|
||||||
|
|
||||||
Future<void> initIconLoading() async {
|
Future<void> initIconLoading() async {
|
||||||
_iconLoading =
|
_iconLoading = (await method.loadProperty(_propertyName, "false")) == "true";
|
||||||
(await method.loadProperty(_propertyName, "false")) == "true";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool currentIconLoading() {
|
bool currentIconLoading() {
|
||||||
|
@ -19,7 +18,7 @@ bool currentIconLoading() {
|
||||||
|
|
||||||
Future<void> _chooseIconLoading(BuildContext context) async {
|
Future<void> _chooseIconLoading(BuildContext context) async {
|
||||||
String? result =
|
String? result =
|
||||||
await chooseListDialog<String>(context, "使用静态图标代替加载动画", ["是", "否"]);
|
await chooseListDialog<String>(context, "尽量减少UI动画", ["是", "否"]);
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
var target = result == "是";
|
var target = result == "是";
|
||||||
await method.saveProperty(_propertyName, "$target");
|
await method.saveProperty(_propertyName, "$target");
|
||||||
|
@ -31,7 +30,7 @@ Widget iconLoadingSetting() {
|
||||||
return StatefulBuilder(
|
return StatefulBuilder(
|
||||||
builder: (BuildContext context, void Function(void Function()) setState) {
|
builder: (BuildContext context, void Function(void Function()) setState) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
title: const Text("使用静态图标代替加载动画"),
|
title: const Text("尽量减少UI动画"),
|
||||||
subtitle: Text(_iconLoading ? "是" : "否"),
|
subtitle: Text(_iconLoading ? "是" : "否"),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
await _chooseIconLoading(context);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import 'package:pikapika/screens/RegisterScreen.dart';
|
||||||
import 'package:pikapika/screens/SettingsScreen.dart';
|
import 'package:pikapika/screens/SettingsScreen.dart';
|
||||||
import 'package:pikapika/screens/components/NetworkSetting.dart';
|
import 'package:pikapika/screens/components/NetworkSetting.dart';
|
||||||
|
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import '../basic/config/Version.dart';
|
import '../basic/config/Version.dart';
|
||||||
import 'AppScreen.dart';
|
import 'AppScreen.dart';
|
||||||
import 'DownloadListScreen.dart';
|
import 'DownloadListScreen.dart';
|
||||||
|
@ -88,7 +89,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const SettingsScreen(
|
builder: (context) => const SettingsScreen(
|
||||||
hiddenAccountInfo: true,
|
hiddenAccountInfo: true,
|
||||||
),
|
),
|
||||||
|
@ -101,7 +102,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const AboutScreen(
|
builder: (context) => const AboutScreen(
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -114,7 +115,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
if (androidNightModeDisplay) {
|
if (androidNightModeDisplay) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const ThemeScreen()),
|
mixRoute(builder: (context) => const ThemeScreen()),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
chooseLightTheme(context);
|
chooseLightTheme(context);
|
||||||
|
@ -186,7 +187,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
recognizer: TapGestureRecognizer()
|
recognizer: TapGestureRecognizer()
|
||||||
..onTap = () => Navigator.push(
|
..onTap = () => Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (BuildContext context) =>
|
builder: (BuildContext context) =>
|
||||||
const RegisterScreen()),
|
const RegisterScreen()),
|
||||||
).then((value) => _loadProperties()),
|
).then((value) => _loadProperties()),
|
||||||
|
@ -209,7 +210,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
await reloadIsPro();
|
await reloadIsPro();
|
||||||
Navigator.pushReplacement(
|
Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const AppScreen()),
|
mixRoute(builder: (context) => const AppScreen()),
|
||||||
);
|
);
|
||||||
} catch (e, s) {
|
} catch (e, s) {
|
||||||
print("$e\n$s");
|
print("$e\n$s");
|
||||||
|
@ -239,7 +240,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
_toDownloadList() {
|
_toDownloadList() {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const DownloadListScreen()),
|
mixRoute(builder: (context) => const DownloadListScreen()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import 'package:pikapika/screens/SearchScreen.dart';
|
||||||
import 'package:pikapika/screens/components/ContentError.dart';
|
import 'package:pikapika/screens/components/ContentError.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
import '../basic/config/CategoriesColumnCount.dart';
|
import '../basic/config/CategoriesColumnCount.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'ComicsScreen.dart';
|
import 'ComicsScreen.dart';
|
||||||
import 'GamesScreen.dart';
|
import 'GamesScreen.dart';
|
||||||
import 'RandomComicsScreen.dart';
|
import 'RandomComicsScreen.dart';
|
||||||
|
@ -35,7 +36,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
|
||||||
if (value.isNotEmpty) {
|
if (value.isNotEmpty) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => SearchScreen(keyword: value),
|
builder: (context) => SearchScreen(keyword: value),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -211,7 +212,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
|
||||||
() {
|
() {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const ComicCollectionsScreen(),
|
builder: (context) => const ComicCollectionsScreen(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -300,7 +301,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
|
||||||
() {
|
() {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const RankingsScreen()),
|
mixRoute(builder: (context) => const RankingsScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -312,7 +313,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
|
||||||
() {
|
() {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const RandomComicsScreen()),
|
mixRoute(builder: (context) => const RandomComicsScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -324,7 +325,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
|
||||||
() {
|
() {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const GamesScreen()),
|
mixRoute(builder: (context) => const GamesScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -335,7 +336,7 @@ class _CategoriesScreenState extends State<CategoriesScreen> {
|
||||||
void _navigateToCategory(String? categoryTitle) {
|
void _navigateToCategory(String? categoryTitle) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => ComicsScreen(category: categoryTitle),
|
builder: (context) => ComicsScreen(category: categoryTitle),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:pikapika/screens/components/CommentMainType.dart';
|
||||||
import 'package:pikapika/screens/components/ItemBuilder.dart';
|
import 'package:pikapika/screens/components/ItemBuilder.dart';
|
||||||
import 'package:pikapika/screens/components/Recommendation.dart';
|
import 'package:pikapika/screens/components/Recommendation.dart';
|
||||||
|
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'ComicReaderScreen.dart';
|
import 'ComicReaderScreen.dart';
|
||||||
import 'DownloadConfirmScreen.dart';
|
import 'DownloadConfirmScreen.dart';
|
||||||
import 'components/ComicDescriptionCard.dart';
|
import 'components/ComicDescriptionCard.dart';
|
||||||
|
@ -285,7 +286,7 @@ class _ComicInfoScreenState extends State<ComicInfoScreen> with RouteAware {
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadConfirmScreen(
|
builder: (context) => DownloadConfirmScreen(
|
||||||
comicInfo: _comicInfo,
|
comicInfo: _comicInfo,
|
||||||
epList: _epList.reversed.toList(),
|
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) {
|
void _push(ComicInfo comicInfo, List<Ep> epList, int order, int? rank) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => ComicReaderScreen(
|
builder: (context) => ComicReaderScreen(
|
||||||
comicInfo: comicInfo,
|
comicInfo: comicInfo,
|
||||||
epList: epList,
|
epList: epList,
|
||||||
|
|
|
@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
|
||||||
import 'package:pikapika/basic/config/Quality.dart';
|
import 'package:pikapika/basic/config/Quality.dart';
|
||||||
import 'package:pikapika/screens/components/ContentError.dart';
|
import 'package:pikapika/screens/components/ContentError.dart';
|
||||||
import 'package:pikapika/screens/components/ContentLoading.dart';
|
import 'package:pikapika/screens/components/ContentLoading.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'DownloadConfirmScreen.dart';
|
import 'DownloadConfirmScreen.dart';
|
||||||
import 'components/ImageReader.dart';
|
import 'components/ImageReader.dart';
|
||||||
import 'components/RightClickPop.dart';
|
import 'components/RightClickPop.dart';
|
||||||
|
@ -86,7 +87,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
|
||||||
if (orderMap.containsKey(epOrder)) {
|
if (orderMap.containsKey(epOrder)) {
|
||||||
_replacement = true;
|
_replacement = true;
|
||||||
Navigator.of(context).pushReplacement(
|
Navigator.of(context).pushReplacement(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => ComicReaderScreen(
|
builder: (context) => ComicReaderScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
epList: widget.epList,
|
epList: widget.epList,
|
||||||
|
@ -100,7 +101,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
|
||||||
|
|
||||||
FutureOr<dynamic> _onReloadEp() {
|
FutureOr<dynamic> _onReloadEp() {
|
||||||
_replacement = true;
|
_replacement = true;
|
||||||
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
Navigator.of(context).pushReplacement(mixRoute(
|
||||||
builder: (context) => ComicReaderScreen(
|
builder: (context) => ComicReaderScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
epList: widget.epList,
|
epList: widget.epList,
|
||||||
|
@ -115,7 +116,7 @@ class _ComicReaderScreenState extends State<ComicReaderScreen> {
|
||||||
FutureOr<dynamic> _onDownload() {
|
FutureOr<dynamic> _onDownload() {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadConfirmScreen(
|
builder: (context) => DownloadConfirmScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
epList: widget.epList.reversed.toList(),
|
epList: widget.epList.reversed.toList(),
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:pikapika/basic/store/Categories.dart';
|
||||||
import 'package:pikapika/basic/config/ListLayout.dart';
|
import 'package:pikapika/basic/config/ListLayout.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
import '../basic/Entities.dart';
|
import '../basic/Entities.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'SearchScreen.dart';
|
import 'SearchScreen.dart';
|
||||||
import 'components/ComicPager.dart';
|
import 'components/ComicPager.dart';
|
||||||
import 'components/RightClickPop.dart';
|
import 'components/RightClickPop.dart';
|
||||||
|
@ -41,7 +42,7 @@ class _ComicsScreenState extends State<ComicsScreen> {
|
||||||
if (value.isNotEmpty) {
|
if (value.isNotEmpty) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) =>
|
builder: (context) =>
|
||||||
SearchScreen(keyword: value, category: widget.category),
|
SearchScreen(keyword: value, category: widget.category),
|
||||||
),
|
),
|
||||||
|
@ -84,7 +85,7 @@ class _ComicsScreenState extends State<ComicsScreen> {
|
||||||
if (category == categoryTitle(null)) {
|
if (category == categoryTitle(null)) {
|
||||||
category = null;
|
category = null;
|
||||||
}
|
}
|
||||||
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
Navigator.of(context).pushReplacement(mixRoute(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return ComicsScreen(
|
return ComicsScreen(
|
||||||
category: category,
|
category: category,
|
||||||
|
|
|
@ -3,6 +3,7 @@ import 'package:pikapika/basic/Common.dart';
|
||||||
|
|
||||||
import '../basic/Entities.dart';
|
import '../basic/Entities.dart';
|
||||||
import '../basic/Method.dart';
|
import '../basic/Method.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'DownloadExportingGroupScreen.dart';
|
import 'DownloadExportingGroupScreen.dart';
|
||||||
import 'components/ContentLoading.dart';
|
import 'components/ContentLoading.dart';
|
||||||
import 'components/DownloadInfoCard.dart';
|
import 'components/DownloadInfoCard.dart';
|
||||||
|
@ -104,7 +105,10 @@ class _DownloadExportGroupScreenState extends State<DownloadExportGroupScreen> {
|
||||||
selected.contains(e.id)
|
selected.contains(e.id)
|
||||||
? Icons.check_circle_sharp
|
? Icons.check_circle_sharp
|
||||||
: Icons.circle_outlined,
|
: Icons.circle_outlined,
|
||||||
color: Theme.of(context).colorScheme.secondary,
|
color: Theme
|
||||||
|
.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.secondary,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
|
@ -151,8 +155,9 @@ class _DownloadExportGroupScreenState extends State<DownloadExportGroupScreen> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final exported = await Navigator.of(context).push(
|
final exported = await Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadExportingGroupScreen(
|
builder: (context) =>
|
||||||
|
DownloadExportingGroupScreen(
|
||||||
idList: selected,
|
idList: selected,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:pikapika/basic/Method.dart';
|
||||||
import 'package:pikapika/basic/config/ExportRename.dart';
|
import 'package:pikapika/basic/config/ExportRename.dart';
|
||||||
import 'package:pikapika/screens/DownloadExportToSocketScreen.dart';
|
import 'package:pikapika/screens/DownloadExportToSocketScreen.dart';
|
||||||
|
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'components/ContentError.dart';
|
import 'components/ContentError.dart';
|
||||||
import 'components/ContentLoading.dart';
|
import 'components/ContentLoading.dart';
|
||||||
import 'components/DownloadInfoCard.dart';
|
import 'components/DownloadInfoCard.dart';
|
||||||
|
@ -111,7 +112,7 @@ class _DownloadExportToFileScreenState
|
||||||
MaterialButton(
|
MaterialButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Navigator.of(context).push(
|
Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadExportToSocketScreen(
|
builder: (context) => DownloadExportToSocketScreen(
|
||||||
task: _task,
|
task: _task,
|
||||||
comicId: widget.comicId,
|
comicId: widget.comicId,
|
||||||
|
|
|
@ -9,6 +9,7 @@ import 'package:pikapika/basic/Method.dart';
|
||||||
import 'package:pikapika/basic/config/ChooserRoot.dart';
|
import 'package:pikapika/basic/config/ChooserRoot.dart';
|
||||||
|
|
||||||
import '../basic/Cross.dart';
|
import '../basic/Cross.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import '../basic/config/IsPro.dart';
|
import '../basic/config/IsPro.dart';
|
||||||
import 'PkzArchiveScreen.dart';
|
import 'PkzArchiveScreen.dart';
|
||||||
import 'components/ContentLoading.dart';
|
import 'components/ContentLoading.dart';
|
||||||
|
@ -120,7 +121,7 @@ class _DownloadImportScreenState extends State<DownloadImportScreen> {
|
||||||
if (path != null) {
|
if (path != null) {
|
||||||
if (path.endsWith(".pkz")) {
|
if (path.endsWith(".pkz")) {
|
||||||
Navigator.of(context).push(
|
Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (BuildContext context) =>
|
builder: (BuildContext context) =>
|
||||||
PkzArchiveScreen(pkzPath: path!),
|
PkzArchiveScreen(pkzPath: path!),
|
||||||
),
|
),
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:pikapika/basic/Entities.dart';
|
import 'package:pikapika/basic/Entities.dart';
|
||||||
import 'package:pikapika/basic/Navigator.dart';
|
import 'package:pikapika/basic/Navigator.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import '../basic/config/ShowCommentAtDownload.dart';
|
import '../basic/config/ShowCommentAtDownload.dart';
|
||||||
import 'ComicInfoScreen.dart';
|
import 'ComicInfoScreen.dart';
|
||||||
import 'DownloadExportToFileScreen.dart';
|
import 'DownloadExportToFileScreen.dart';
|
||||||
|
@ -78,7 +79,7 @@ class _DownloadInfoScreenState extends State<DownloadInfoScreen>
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadExportToFileScreen(
|
builder: (context) => DownloadExportToFileScreen(
|
||||||
comicId: widget.comicId,
|
comicId: widget.comicId,
|
||||||
comicTitle: widget.comicTitle,
|
comicTitle: widget.comicTitle,
|
||||||
|
@ -92,7 +93,7 @@ class _DownloadInfoScreenState extends State<DownloadInfoScreen>
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => ComicInfoScreen(
|
builder: (context) => ComicInfoScreen(
|
||||||
comicId: widget.comicId,
|
comicId: widget.comicId,
|
||||||
),
|
),
|
||||||
|
@ -224,7 +225,7 @@ class _DownloadInfoScreenState extends State<DownloadInfoScreen>
|
||||||
) {
|
) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadReaderScreen(
|
builder: (context) => DownloadReaderScreen(
|
||||||
comicInfo: _task,
|
comicInfo: _task,
|
||||||
epList: _epList,
|
epList: _epList,
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:pikapika/basic/Common.dart';
|
||||||
import 'package:pikapika/basic/Entities.dart';
|
import 'package:pikapika/basic/Entities.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
import 'package:pikapika/screens/DownloadExportGroupScreen.dart';
|
import 'package:pikapika/screens/DownloadExportGroupScreen.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'DownloadImportScreen.dart';
|
import 'DownloadImportScreen.dart';
|
||||||
import 'DownloadInfoScreen.dart';
|
import 'DownloadInfoScreen.dart';
|
||||||
import 'components/ContentLoading.dart';
|
import 'components/ContentLoading.dart';
|
||||||
|
@ -143,7 +144,7 @@ class _DownloadListScreenState extends State<DownloadListScreen> {
|
||||||
}
|
}
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadInfoScreen(
|
builder: (context) => DownloadInfoScreen(
|
||||||
comicId: e.id,
|
comicId: e.id,
|
||||||
comicTitle: e.title,
|
comicTitle: e.title,
|
||||||
|
@ -170,7 +171,7 @@ class _DownloadListScreenState extends State<DownloadListScreen> {
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await Navigator.push(
|
await Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const DownloadExportGroupScreen(),
|
builder: (context) => const DownloadExportGroupScreen(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -197,7 +198,7 @@ class _DownloadListScreenState extends State<DownloadListScreen> {
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await Navigator.push(
|
await Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const DownloadImportScreen(),
|
builder: (context) => const DownloadImportScreen(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
|
||||||
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
||||||
import 'package:pikapika/basic/config/ReaderType.dart';
|
import 'package:pikapika/basic/config/ReaderType.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'components/ContentError.dart';
|
import 'components/ContentError.dart';
|
||||||
import 'components/ContentLoading.dart';
|
import 'components/ContentLoading.dart';
|
||||||
import 'components/ImageReader.dart';
|
import 'components/ImageReader.dart';
|
||||||
|
@ -87,7 +88,7 @@ class _DownloadReaderScreenState extends State<DownloadReaderScreen> {
|
||||||
if (orderMap.containsKey(epOrder)) {
|
if (orderMap.containsKey(epOrder)) {
|
||||||
_replacement = true;
|
_replacement = true;
|
||||||
Navigator.of(context).pushReplacement(
|
Navigator.of(context).pushReplacement(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadReaderScreen(
|
builder: (context) => DownloadReaderScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
epList: widget.epList,
|
epList: widget.epList,
|
||||||
|
@ -102,7 +103,7 @@ class _DownloadReaderScreenState extends State<DownloadReaderScreen> {
|
||||||
FutureOr<dynamic> _onReloadEp() {
|
FutureOr<dynamic> _onReloadEp() {
|
||||||
_replacement = true;
|
_replacement = true;
|
||||||
Navigator.of(context).pushReplacement(
|
Navigator.of(context).pushReplacement(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => DownloadReaderScreen(
|
builder: (context) => DownloadReaderScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
epList: widget.epList,
|
epList: widget.epList,
|
||||||
|
|
|
@ -6,6 +6,7 @@ import 'package:pikapika/screens/components/ContentError.dart';
|
||||||
import 'package:pikapika/screens/components/ContentLoading.dart';
|
import 'package:pikapika/screens/components/ContentLoading.dart';
|
||||||
import 'package:pikapika/screens/components/Images.dart';
|
import 'package:pikapika/screens/components/Images.dart';
|
||||||
|
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'GameDownloadScreen.dart';
|
import 'GameDownloadScreen.dart';
|
||||||
import 'components/CommentList.dart';
|
import 'components/CommentList.dart';
|
||||||
import 'components/GameTitleCard.dart';
|
import 'components/GameTitleCard.dart';
|
||||||
|
@ -97,7 +98,7 @@ class _GameInfoScreenState extends State<GameInfoScreen> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => GameDownloadScreen(info),
|
builder: (context) => GameDownloadScreen(info),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:pikapika/basic/Entities.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
import 'package:pikapika/screens/components/ContentBuilder.dart';
|
import 'package:pikapika/screens/components/ContentBuilder.dart';
|
||||||
|
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'GameInfoScreen.dart';
|
import 'GameInfoScreen.dart';
|
||||||
import 'components/Images.dart';
|
import 'components/Images.dart';
|
||||||
import 'components/RightClickPop.dart';
|
import 'components/RightClickPop.dart';
|
||||||
|
@ -222,7 +223,7 @@ class GameCard extends StatelessWidget {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => GameInfoScreen(info.id)),
|
builder: (context) => GameInfoScreen(info.id)),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -124,14 +124,14 @@ class _InitScreenState extends State<InitScreen> {
|
||||||
if (initUrl != null) {
|
if (initUrl != null) {
|
||||||
if (RegExp(r"^pika://comic/([0-9A-z]+)/$").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)!;
|
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) =>
|
builder: (BuildContext context) =>
|
||||||
ComicInfoScreen(comicId: comicId, holdPkz: true),
|
ComicInfoScreen(comicId: comicId, holdPkz: true),
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
} else if (RegExp(r"^.*\.pkz$").allMatches(initUrl!).isNotEmpty) {
|
} 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(mixRoute(
|
||||||
builder: (BuildContext context) =>
|
builder: (BuildContext context) =>
|
||||||
PkzArchiveScreen(pkzPath: file.path, holdPkz: true),
|
PkzArchiveScreen(pkzPath: file.path, holdPkz: true),
|
||||||
));
|
));
|
||||||
|
@ -139,7 +139,7 @@ class _InitScreenState extends State<InitScreen> {
|
||||||
} else if (RegExp(r"^.*\.((pki)|(zip))$").allMatches(initUrl!).isNotEmpty) {
|
} else if (RegExp(r"^.*\.((pki)|(zip))$").allMatches(initUrl!).isNotEmpty) {
|
||||||
File file = await toFile(initUrl!);
|
File file = await toFile(initUrl!);
|
||||||
Navigator.of(context).pushReplacement(
|
Navigator.of(context).pushReplacement(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (BuildContext context) =>
|
builder: (BuildContext context) =>
|
||||||
DownloadOnlyImportScreen(path: file.path, holdPkz: true),
|
DownloadOnlyImportScreen(path: file.path, holdPkz: true),
|
||||||
),
|
),
|
||||||
|
@ -197,13 +197,13 @@ class _InitScreenState extends State<InitScreen> {
|
||||||
// 如果token或username+password有效则直接进入登录好的界面
|
// 如果token或username+password有效则直接进入登录好的界面
|
||||||
Navigator.pushReplacement(
|
Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const AppScreen()),
|
mixRoute(builder: (context) => const AppScreen()),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// 否则跳转到登录页
|
// 否则跳转到登录页
|
||||||
Navigator.pushReplacement(
|
Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const AccountScreen()),
|
mixRoute(builder: (context) => const AccountScreen()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import 'package:uri_to_file/uri_to_file.dart';
|
||||||
|
|
||||||
import '../basic/Common.dart';
|
import '../basic/Common.dart';
|
||||||
import '../basic/Navigator.dart';
|
import '../basic/Navigator.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'PkzComicInfoScreen.dart';
|
import 'PkzComicInfoScreen.dart';
|
||||||
|
|
||||||
class PkzArchiveScreen extends StatefulWidget {
|
class PkzArchiveScreen extends StatefulWidget {
|
||||||
|
@ -80,7 +81,7 @@ class _PkzArchiveScreenState extends State<PkzArchiveScreen> with RouteAware {
|
||||||
}
|
}
|
||||||
_info = await method.pkzInfo(widget.pkzPath);
|
_info = await method.pkzInfo(widget.pkzPath);
|
||||||
if (_info.comics.length == 1) {
|
if (_info.comics.length == 1) {
|
||||||
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
Navigator.of(context).pushReplacement(mixRoute(
|
||||||
builder: (BuildContext context) => PkzComicInfoScreen(
|
builder: (BuildContext context) => PkzComicInfoScreen(
|
||||||
pkzPath: widget.pkzPath,
|
pkzPath: widget.pkzPath,
|
||||||
pkzComic: _info.comics.first,
|
pkzComic: _info.comics.first,
|
||||||
|
@ -118,7 +119,7 @@ class _PkzArchiveScreenState extends State<PkzArchiveScreen> with RouteAware {
|
||||||
.map((e) => GestureDetector(
|
.map((e) => GestureDetector(
|
||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(mixRoute(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return PkzComicInfoScreen(
|
return PkzComicInfoScreen(
|
||||||
pkzComic: e,
|
pkzComic: e,
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:uri_to_file/uri_to_file.dart';
|
||||||
|
|
||||||
import '../basic/Common.dart';
|
import '../basic/Common.dart';
|
||||||
import '../basic/Navigator.dart';
|
import '../basic/Navigator.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'PkzArchiveScreen.dart';
|
import 'PkzArchiveScreen.dart';
|
||||||
import 'components/PkzComicInfoCard.dart';
|
import 'components/PkzComicInfoCard.dart';
|
||||||
|
|
||||||
|
@ -89,7 +90,7 @@ class _PkzComicInfoScreenState extends State<PkzComicInfoScreen>
|
||||||
for (var chapter in volume.chapters) {
|
for (var chapter in volume.chapters) {
|
||||||
chapterButtons.add(MaterialButton(
|
chapterButtons.add(MaterialButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(mixRoute(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return PkzReaderScreen(
|
return PkzReaderScreen(
|
||||||
comicInfo: widget.pkzComic,
|
comicInfo: widget.pkzComic,
|
||||||
|
@ -206,7 +207,7 @@ class _PkzComicInfoScreenState extends State<PkzComicInfoScreen>
|
||||||
child: MaterialButton(
|
child: MaterialButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
if (chapters.containsKey(_log?.lastViewEpId)) {
|
if (chapters.containsKey(_log?.lastViewEpId)) {
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(mixRoute(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return PkzReaderScreen(
|
return PkzReaderScreen(
|
||||||
comicInfo: widget.pkzComic,
|
comicInfo: widget.pkzComic,
|
||||||
|
@ -218,7 +219,7 @@ class _PkzComicInfoScreenState extends State<PkzComicInfoScreen>
|
||||||
));
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(mixRoute(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return PkzReaderScreen(
|
return PkzReaderScreen(
|
||||||
comicInfo: widget.pkzComic,
|
comicInfo: widget.pkzComic,
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:pikapika/basic/config/FullScreenUI.dart';
|
||||||
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
import 'package:pikapika/basic/config/ReaderDirection.dart';
|
||||||
import 'package:pikapika/basic/config/ReaderType.dart';
|
import 'package:pikapika/basic/config/ReaderType.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'components/ContentError.dart';
|
import 'components/ContentError.dart';
|
||||||
import 'components/ContentLoading.dart';
|
import 'components/ContentLoading.dart';
|
||||||
import 'components/ImageReader.dart';
|
import 'components/ImageReader.dart';
|
||||||
|
@ -127,7 +128,7 @@ class _PkzReaderScreenState extends State<PkzReaderScreen> {
|
||||||
final ep = widget.epList[epOrder];
|
final ep = widget.epList[epOrder];
|
||||||
_replacement = true;
|
_replacement = true;
|
||||||
Navigator.of(context).pushReplacement(
|
Navigator.of(context).pushReplacement(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => PkzReaderScreen(
|
builder: (context) => PkzReaderScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
pkzPath: widget.pkzPath,
|
pkzPath: widget.pkzPath,
|
||||||
|
@ -141,7 +142,7 @@ class _PkzReaderScreenState extends State<PkzReaderScreen> {
|
||||||
FutureOr<dynamic> _onReloadEp() {
|
FutureOr<dynamic> _onReloadEp() {
|
||||||
_replacement = true;
|
_replacement = true;
|
||||||
Navigator.of(context).pushReplacement(
|
Navigator.of(context).pushReplacement(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => PkzReaderScreen(
|
builder: (context) => PkzReaderScreen(
|
||||||
comicInfo: widget.comicInfo,
|
comicInfo: widget.comicInfo,
|
||||||
currentEpId: widget.currentEpId,
|
currentEpId: widget.currentEpId,
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:pikapika/basic/config/ListLayout.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
import 'package:pikapika/screens/components/RightClickPop.dart';
|
import 'package:pikapika/screens/components/RightClickPop.dart';
|
||||||
import '../basic/Entities.dart';
|
import '../basic/Entities.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'components/ComicPager.dart';
|
import 'components/ComicPager.dart';
|
||||||
|
|
||||||
// 搜索页面
|
// 搜索页面
|
||||||
|
@ -36,7 +37,7 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
if (value.isNotEmpty) {
|
if (value.isNotEmpty) {
|
||||||
Navigator.pushReplacement(
|
Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => SearchScreen(
|
builder: (context) => SearchScreen(
|
||||||
keyword: value,
|
keyword: value,
|
||||||
category: widget.category,
|
category: widget.category,
|
||||||
|
@ -71,7 +72,7 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
if (category == categoryTitle(null)) {
|
if (category == categoryTitle(null)) {
|
||||||
category = null;
|
category = null;
|
||||||
}
|
}
|
||||||
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
Navigator.of(context).pushReplacement(mixRoute(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return SearchScreen(
|
return SearchScreen(
|
||||||
category: category,
|
category: category,
|
||||||
|
|
|
@ -67,7 +67,7 @@ class SettingsScreen extends StatelessWidget {
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const ModifyPasswordScreen()),
|
builder: (context) => const ModifyPasswordScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -103,7 +103,7 @@ class SettingsScreen extends StatelessWidget {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const CleanScreen()),
|
mixRoute(builder: (context) => const CleanScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
title: const Text('清除缓存'),
|
title: const Text('清除缓存'),
|
||||||
|
@ -147,7 +147,7 @@ class SettingsScreen extends StatelessWidget {
|
||||||
await confirmDialog(context, "文件迁移", "此功能菜单保存后, 需要重启程序, 您确认吗");
|
await confirmDialog(context, "文件迁移", "此功能菜单保存后, 需要重启程序, 您确认吗");
|
||||||
if (f) {
|
if (f) {
|
||||||
Navigator.of(context).pushAndRemoveUntil(
|
Navigator.of(context).pushAndRemoveUntil(
|
||||||
MaterialPageRoute(builder: (BuildContext context) {
|
mixRoute(builder: (BuildContext context) {
|
||||||
return const MigrateScreen();
|
return const MigrateScreen();
|
||||||
}),
|
}),
|
||||||
(route) => false,
|
(route) => false,
|
||||||
|
|
|
@ -10,6 +10,7 @@ import 'package:pikapika/screens/ThemeScreen.dart';
|
||||||
import 'package:pikapika/screens/ViewLogsScreen.dart';
|
import 'package:pikapika/screens/ViewLogsScreen.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
|
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import '../basic/config/IsPro.dart';
|
import '../basic/config/IsPro.dart';
|
||||||
import '../basic/config/Themes.dart';
|
import '../basic/config/Themes.dart';
|
||||||
import 'SettingsScreen.dart';
|
import 'SettingsScreen.dart';
|
||||||
|
@ -58,7 +59,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
await method.setPassword("");
|
await method.setPassword("");
|
||||||
Navigator.pushReplacement(
|
Navigator.pushReplacement(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const AccountScreen()),
|
builder: (context) => const AccountScreen()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -69,7 +70,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const AboutScreen()),
|
mixRoute(builder: (context) => const AboutScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
icon: Badged(
|
icon: Badged(
|
||||||
|
@ -80,7 +81,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context)
|
Navigator.of(context)
|
||||||
.push(MaterialPageRoute(builder: (BuildContext context) {
|
.push(mixRoute(builder: (BuildContext context) {
|
||||||
return const ProScreen();
|
return const ProScreen();
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
@ -92,7 +93,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const SettingsScreen()),
|
mixRoute(builder: (context) => const SettingsScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.settings),
|
icon: const Icon(Icons.settings),
|
||||||
|
@ -109,7 +110,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
if (androidNightModeDisplay) {
|
if (androidNightModeDisplay) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const ThemeScreen()),
|
mixRoute(builder: (context) => const ThemeScreen()),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
chooseLightTheme(context);
|
chooseLightTheme(context);
|
||||||
|
@ -122,7 +123,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const FavouritePaperScreen()),
|
builder: (context) => const FavouritePaperScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -133,7 +134,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const ViewLogsScreen()),
|
mixRoute(builder: (context) => const ViewLogsScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
title: const Text('浏览记录'),
|
title: const Text('浏览记录'),
|
||||||
|
@ -143,7 +144,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => const DownloadListScreen()),
|
builder: (context) => const DownloadListScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -154,7 +155,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const ProScreen()),
|
mixRoute(builder: (context) => const ProScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
title: const Text('发电'),
|
title: const Text('发电'),
|
||||||
|
@ -164,7 +165,7 @@ class _SpaceScreenState extends State<SpaceScreen> {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) => const AboutScreen()),
|
mixRoute(builder: (context) => const AboutScreen()),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
title: Badged(
|
title: Badged(
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:pikapika/screens/components/ComicInfoCard.dart';
|
||||||
import 'package:pikapika/screens/components/RightClickPop.dart';
|
import 'package:pikapika/screens/components/RightClickPop.dart';
|
||||||
|
|
||||||
import '../basic/Entities.dart';
|
import '../basic/Entities.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import 'ComicInfoScreen.dart';
|
import 'ComicInfoScreen.dart';
|
||||||
import 'components/Images.dart';
|
import 'components/Images.dart';
|
||||||
|
|
||||||
|
@ -159,7 +160,7 @@ class _ViewLogsScreenState extends State<ViewLogsScreen> {
|
||||||
void _chooseComic(String comicId) {
|
void _chooseComic(String comicId) {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) => ComicInfoScreen(
|
builder: (context) => ComicInfoScreen(
|
||||||
comicId: comicId,
|
comicId: comicId,
|
||||||
),
|
),
|
||||||
|
|
|
@ -5,6 +5,7 @@ import 'package:pikapika/basic/Entities.dart' as e;
|
||||||
import 'package:pikapika/screens/CommentScreen.dart';
|
import 'package:pikapika/screens/CommentScreen.dart';
|
||||||
import 'package:pikapika/screens/components/ItemBuilder.dart';
|
import 'package:pikapika/screens/components/ItemBuilder.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
|
import '../../basic/config/IconLoading.dart';
|
||||||
import 'CommentItem.dart';
|
import 'CommentItem.dart';
|
||||||
import 'CommentMainType.dart';
|
import 'CommentMainType.dart';
|
||||||
|
|
||||||
|
@ -82,7 +83,7 @@ class _CommentListState extends State<CommentList> {
|
||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).push(
|
Navigator.of(context).push(
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) =>
|
builder: (context) =>
|
||||||
CommentScreen(widget.mainType, widget.mainId, comment),
|
CommentScreen(widget.mainType, widget.mainId, comment),
|
||||||
),
|
),
|
||||||
|
|
|
@ -23,6 +23,7 @@ import 'package:pikapika/basic/config/ReaderType.dart';
|
||||||
import 'package:pikapika/basic/config/VolumeController.dart';
|
import 'package:pikapika/basic/config/VolumeController.dart';
|
||||||
import 'package:pikapika/screens/components/PkzImages.dart';
|
import 'package:pikapika/screens/components/PkzImages.dart';
|
||||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||||
|
import '../../basic/config/IconLoading.dart';
|
||||||
import '../FilePhotoViewScreen.dart';
|
import '../FilePhotoViewScreen.dart';
|
||||||
import 'gesture_zoom_box.dart';
|
import 'gesture_zoom_box.dart';
|
||||||
|
|
||||||
|
@ -1680,7 +1681,7 @@ class _GalleryReaderState extends _ImageReaderContentState {
|
||||||
case '预览图片':
|
case '预览图片':
|
||||||
try {
|
try {
|
||||||
var file = await load();
|
var file = await load();
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(mixRoute(
|
||||||
builder: (context) => FilePhotoViewScreen(file),
|
builder: (context) => FilePhotoViewScreen(file),
|
||||||
));
|
));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import 'package:pikapika/basic/config/ImageAddress.dart';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:ui' as ui show Codec;
|
import 'dart:ui' as ui show Codec;
|
||||||
|
|
||||||
|
import '../../basic/config/IconLoading.dart';
|
||||||
import '../FilePhotoViewScreen.dart';
|
import '../FilePhotoViewScreen.dart';
|
||||||
|
|
||||||
// 从本地加载图片
|
// 从本地加载图片
|
||||||
|
@ -343,7 +344,7 @@ Widget buildFile(String file, double? width, double? height,
|
||||||
String? choose = await chooseListDialog(context, '请选择', ['预览图片', '保存图片']);
|
String? choose = await chooseListDialog(context, '请选择', ['预览图片', '保存图片']);
|
||||||
switch (choose) {
|
switch (choose) {
|
||||||
case '预览图片':
|
case '预览图片':
|
||||||
Navigator.of(context).push(MaterialPageRoute(
|
Navigator.of(context).push(mixRoute(
|
||||||
builder: (context) => FilePhotoViewScreen(file),
|
builder: (context) => FilePhotoViewScreen(file),
|
||||||
));
|
));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -3,6 +3,7 @@ import 'package:pikapika/basic/Entities.dart';
|
||||||
import 'package:pikapika/screens/ComicInfoScreen.dart';
|
import 'package:pikapika/screens/ComicInfoScreen.dart';
|
||||||
import 'package:pikapika/basic/Method.dart';
|
import 'package:pikapika/basic/Method.dart';
|
||||||
|
|
||||||
|
import '../../basic/config/IconLoading.dart';
|
||||||
import 'ItemBuilder.dart';
|
import 'ItemBuilder.dart';
|
||||||
import 'Images.dart';
|
import 'Images.dart';
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ class _RecommendationState extends State<Recommendation> {
|
||||||
var i = 0;
|
var i = 0;
|
||||||
Navigator.pushAndRemoveUntil(
|
Navigator.pushAndRemoveUntil(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
mixRoute(
|
||||||
builder: (context) =>
|
builder: (context) =>
|
||||||
ComicInfoScreen(comicId: e.id)),
|
ComicInfoScreen(comicId: e.id)),
|
||||||
(route) => i++ < 10);
|
(route) => i++ < 10);
|
||||||
|
|
|
@ -13,6 +13,7 @@ import 'package:pikapika/screens/components/Avatar.dart';
|
||||||
import 'package:pikapika/screens/components/Images.dart';
|
import 'package:pikapika/screens/components/Images.dart';
|
||||||
import 'package:pikapika/screens/components/ItemBuilder.dart';
|
import 'package:pikapika/screens/components/ItemBuilder.dart';
|
||||||
|
|
||||||
|
import '../../basic/config/IconLoading.dart';
|
||||||
import 'DesktopCropper.dart';
|
import 'DesktopCropper.dart';
|
||||||
|
|
||||||
const double _cardHeight = 180;
|
const double _cardHeight = 180;
|
||||||
|
@ -216,7 +217,7 @@ class _UserProfileCardState extends State<UserProfileCard> {
|
||||||
);
|
);
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
List<int>? buff = await Navigator.of(context).push(
|
List<int>? buff = await Navigator.of(context).push(
|
||||||
MaterialPageRoute(builder: (BuildContext context) {
|
mixRoute(builder: (BuildContext context) {
|
||||||
return DesktopCropper(
|
return DesktopCropper(
|
||||||
file: result.files.first.path!,
|
file: result.files.first.path!,
|
||||||
aspectRatio: 1,
|
aspectRatio: 1,
|
||||||
|
|
|
@ -14,7 +14,7 @@ packages:
|
||||||
name: archive
|
name: archive
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.5"
|
version: "3.3.6"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -543,7 +543,7 @@ packages:
|
||||||
name: url_launcher_windows
|
name: url_launcher_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.3"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -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.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 1.6.1+9
|
version: 1.6.4+10
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.12.0 <3.0.0"
|
sdk: ">=2.12.0 <3.0.0"
|
||||||
|
|
Loading…
Reference in New Issue