volume next ep

This commit is contained in:
niuhuan 2024-04-02 20:56:17 +08:00
parent 0172b4747a
commit d66ff4d536
5 changed files with 74 additions and 0 deletions

View File

@ -1,5 +1,6 @@
v1.7.8 v1.7.8
- [x] ♻️ iOS可以使用FaceID进行解锁App - [x] ♻️ iOS可以使用FaceID进行解锁App
- [x] ✨ 音量键快速翻阅下一章节(设置中开启)
v1.7.7 v1.7.7
- [x] 🐛 修复一些极端情况下崩溃 - [x] 🐛 修复一些极端情况下崩溃

View File

@ -0,0 +1,31 @@
import 'package:flutter/material.dart';
import '../Method.dart';
const _propertyName = "volumeNextChapter";
late bool _volumeNextChapter;
Future initVolumeNextChapter() async {
_volumeNextChapter =
(await method.loadProperty(_propertyName, "true")) == "true";
}
bool volumeNextChapter() {
return _volumeNextChapter;
}
Widget volumeNextChapterSetting() {
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return SwitchListTile(
title: const Text("双击音量键下一章节"),
value: _volumeNextChapter,
onChanged: (value) async {
await method.saveProperty(_propertyName, "$value");
_volumeNextChapter = value;
setState(() {});
},
);
},
);
}

View File

@ -53,6 +53,7 @@ import '../basic/config/HiddenFdIcon.dart';
import '../basic/config/IconLoading.dart'; import '../basic/config/IconLoading.dart';
import '../basic/config/IsPro.dart'; import '../basic/config/IsPro.dart';
import '../basic/config/ReaderBackgroundColor.dart'; import '../basic/config/ReaderBackgroundColor.dart';
import '../basic/config/VolumeNextChapter.dart';
import '../basic/config/WebDav.dart'; import '../basic/config/WebDav.dart';
import 'AccountScreen.dart'; import 'AccountScreen.dart';
import 'AppScreen.dart'; import 'AppScreen.dart';
@ -125,6 +126,7 @@ class _InitScreenState extends State<InitScreen> {
await initEBookScrolling(); await initEBookScrolling();
await initEBookScrollingRange(); await initEBookScrollingRange();
await initEBookScrollingTrigger(); await initEBookScrollingTrigger();
await initVolumeNextChapter();
String? initUrl; String? initUrl;
if (Platform.isAndroid || Platform.isIOS) { if (Platform.isAndroid || Platform.isIOS) {

View File

@ -31,6 +31,7 @@ import 'package:pikapika/basic/config/ShowCommentAtDownload.dart';
import 'package:pikapika/basic/config/Themes.dart'; import 'package:pikapika/basic/config/Themes.dart';
import 'package:pikapika/basic/config/TimeOffsetHour.dart'; import 'package:pikapika/basic/config/TimeOffsetHour.dart';
import 'package:pikapika/basic/config/VolumeController.dart'; import 'package:pikapika/basic/config/VolumeController.dart';
import 'package:pikapika/basic/config/VolumeNextChapter.dart';
import 'package:pikapika/screens/components/NetworkSetting.dart'; import 'package:pikapika/screens/components/NetworkSetting.dart';
import 'package:pikapika/screens/components/RightClickPop.dart'; import 'package:pikapika/screens/components/RightClickPop.dart';
@ -165,6 +166,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
autoFullScreenSetting(), autoFullScreenSetting(),
fullScreenActionSetting(), fullScreenActionSetting(),
volumeControllerSetting(), volumeControllerSetting(),
volumeNextChapterSetting(),
keyboardControllerSetting(), keyboardControllerSetting(),
const Divider(), const Divider(),
noAnimationSetting(), noAnimationSetting(),

View File

@ -5,6 +5,7 @@ import 'package:another_xlider/another_xlider.dart';
import 'package:event/event.dart'; import 'package:event/event.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
import 'package:photo_view/photo_view_gallery.dart'; import 'package:photo_view/photo_view_gallery.dart';
import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Common.dart';
@ -27,6 +28,7 @@ import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../../basic/config/IconLoading.dart'; import '../../basic/config/IconLoading.dart';
import '../../basic/config/ReaderBackgroundColor.dart'; import '../../basic/config/ReaderBackgroundColor.dart';
import '../../basic/config/UseApiLoadImage.dart'; import '../../basic/config/UseApiLoadImage.dart';
import '../../basic/config/VolumeNextChapter.dart';
import '../FilePhotoViewScreen.dart'; import '../FilePhotoViewScreen.dart';
import 'gesture_zoom_box.dart'; import 'gesture_zoom_box.dart';
@ -272,12 +274,48 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> {
case "DOWN": case "DOWN":
if (_current < widget.struct.images.length - 1) { if (_current < widget.struct.images.length - 1) {
_needJumpTo(_current + 1, true); _needJumpTo(_current + 1, true);
} else {
if (volumeNextChapter()) {
final now = DateTime.now().millisecondsSinceEpoch;
if (_noticeTime + 3000 > now) {
if (_hasNextEp()) {
_onNextAction();
} else {
showToast(
"已经到头了",
context: context,
position: StyledToastPosition.center,
animation: StyledToastAnimation.scale,
reverseAnimation: StyledToastAnimation.fade,
duration: const Duration(seconds: 3),
animDuration: const Duration(milliseconds: 300),
curve: Curves.elasticOut,
reverseCurve: Curves.linear,
);
}
} else {
_noticeTime = now;
showToast(
"再次点击跳转到下一章",
context: context,
position: StyledToastPosition.center,
animation: StyledToastAnimation.scale,
reverseAnimation: StyledToastAnimation.fade,
duration: const Duration(seconds: 3),
animDuration: const Duration(milliseconds: 300),
curve: Curves.elasticOut,
reverseCurve: Curves.linear,
);
}
}
} }
break; break;
} }
} }
} }
int _noticeTime = 0;
late int _startIndex; late int _startIndex;
late int _current; late int _current;
late int _slider; late int _slider;