mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
Refactor
This commit is contained in:
@@ -40,9 +40,13 @@ import 'package:window_manager/window_manager.dart';
|
|||||||
import 'package:battery_plus/battery_plus.dart';
|
import 'package:battery_plus/battery_plus.dart';
|
||||||
|
|
||||||
part 'scaffold.dart';
|
part 'scaffold.dart';
|
||||||
|
|
||||||
part 'images.dart';
|
part 'images.dart';
|
||||||
|
|
||||||
part 'gesture.dart';
|
part 'gesture.dart';
|
||||||
|
|
||||||
part 'comic_image.dart';
|
part 'comic_image.dart';
|
||||||
|
|
||||||
part 'loading.dart';
|
part 'loading.dart';
|
||||||
|
|
||||||
extension _ReaderContext on BuildContext {
|
extension _ReaderContext on BuildContext {
|
||||||
@@ -94,7 +98,8 @@ class Reader extends StatefulWidget {
|
|||||||
State<Reader> createState() => _ReaderState();
|
State<Reader> createState() => _ReaderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
class _ReaderState extends State<Reader>
|
||||||
|
with _ReaderLocation, _ReaderWindow, _VolumeListener, _ImagePerPageHandler {
|
||||||
@override
|
@override
|
||||||
void update() {
|
void update() {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
@@ -111,37 +116,11 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
|
|
||||||
List<String>? images;
|
List<String>? images;
|
||||||
|
|
||||||
|
@override
|
||||||
late ReaderMode mode;
|
late ReaderMode mode;
|
||||||
|
|
||||||
int get imagesPerPage {
|
@override
|
||||||
if (mode.isContinuous) return 1;
|
bool get isPortrait => MediaQuery.of(context).orientation == Orientation.portrait;
|
||||||
if (isPortrait) {
|
|
||||||
return appdata.settings['readerScreenPicNumberForPortrait'] ?? 1;
|
|
||||||
} else {
|
|
||||||
return appdata.settings['readerScreenPicNumberForLandscape'] ?? 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
late int _lastImagesPerPage;
|
|
||||||
|
|
||||||
bool get isPortrait =>
|
|
||||||
MediaQuery.of(context).orientation == Orientation.portrait;
|
|
||||||
|
|
||||||
void _checkImagesPerPageChange() {
|
|
||||||
int currentImagesPerPage = imagesPerPage;
|
|
||||||
if (_lastImagesPerPage != currentImagesPerPage) {
|
|
||||||
_adjustPageForImagesPerPageChange(
|
|
||||||
_lastImagesPerPage, currentImagesPerPage);
|
|
||||||
_lastImagesPerPage = currentImagesPerPage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _adjustPageForImagesPerPageChange(
|
|
||||||
int oldImagesPerPage, int newImagesPerPage) {
|
|
||||||
int previousImageIndex = (page - 1) * oldImagesPerPage;
|
|
||||||
int newPage = (previousImageIndex ~/ newImagesPerPage) + 1;
|
|
||||||
page = newPage;
|
|
||||||
}
|
|
||||||
|
|
||||||
History? history;
|
History? history;
|
||||||
|
|
||||||
@@ -150,8 +129,6 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
|
|
||||||
var focusNode = FocusNode();
|
var focusNode = FocusNode();
|
||||||
|
|
||||||
VolumeListener? volumeListener;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
page = widget.initialPage ?? 1;
|
page = widget.initialPage ?? 1;
|
||||||
@@ -163,7 +140,7 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
chapter = 1;
|
chapter = 1;
|
||||||
}
|
}
|
||||||
if (widget.initialChapterGroup != null) {
|
if (widget.initialChapterGroup != null) {
|
||||||
for (int i=0; i<(widget.initialChapterGroup!-1); i++) {
|
for (int i = 0; i < (widget.initialChapterGroup! - 1); i++) {
|
||||||
chapter += widget.chapters!.getGroupByIndex(i).length;
|
chapter += widget.chapters!.getGroupByIndex(i).length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -189,10 +166,7 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
@override
|
@override
|
||||||
void didChangeDependencies() {
|
void didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
_lastImagesPerPage = imagesPerPage;
|
initImagesPerPage(widget.initialPage ?? 1);
|
||||||
if (imagesPerPage != 1) {
|
|
||||||
page = (widget.initialPage! / imagesPerPage).ceil();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setImageCacheSize() async {
|
void setImageCacheSize() async {
|
||||||
@@ -259,12 +233,12 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
|
|
||||||
void updateHistory() {
|
void updateHistory() {
|
||||||
if (history != null) {
|
if (history != null) {
|
||||||
if(page == maxPage){
|
if (page == maxPage) {
|
||||||
/// Record the last image of chapter
|
/// Record the last image of chapter
|
||||||
history!.page = images?.length ?? 1;
|
history!.page = images?.length ?? 1;
|
||||||
} else {
|
} else {
|
||||||
/// Record the first image of the page
|
/// Record the first image of the page
|
||||||
history!.page = (page-1) * imagesPerPage + 1;
|
history!.page = (page - 1) * imagesPerPage + 1;
|
||||||
}
|
}
|
||||||
if (maxPage > 1) {
|
if (maxPage > 1) {
|
||||||
history!.maxPage = images?.length ?? 1;
|
history!.maxPage = images?.length ?? 1;
|
||||||
@@ -278,7 +252,7 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
}
|
}
|
||||||
history!.readEpisode.add('${g + 1}-$c');
|
history!.readEpisode.add('${g + 1}-$c');
|
||||||
history!.ep = c;
|
history!.ep = c;
|
||||||
history!.group = g+1;
|
history!.group = g + 1;
|
||||||
} else {
|
} else {
|
||||||
history!.readEpisode.add(chapter.toString());
|
history!.readEpisode.add(chapter.toString());
|
||||||
history!.ep = chapter;
|
history!.ep = chapter;
|
||||||
@@ -291,6 +265,61 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract mixin class _ImagePerPageHandler {
|
||||||
|
late int _lastImagesPerPage;
|
||||||
|
|
||||||
|
bool get isPortrait;
|
||||||
|
|
||||||
|
int get page;
|
||||||
|
|
||||||
|
set page(int value);
|
||||||
|
|
||||||
|
ReaderMode get mode;
|
||||||
|
|
||||||
|
void initImagesPerPage(int initialPage) {
|
||||||
|
_lastImagesPerPage = imagesPerPage;
|
||||||
|
if (imagesPerPage != 1) {
|
||||||
|
page = (initialPage / imagesPerPage).ceil();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The number of images displayed on one screen
|
||||||
|
int get imagesPerPage {
|
||||||
|
if (mode.isContinuous) return 1;
|
||||||
|
if (isPortrait) {
|
||||||
|
return appdata.settings['readerScreenPicNumberForPortrait'] ?? 1;
|
||||||
|
} else {
|
||||||
|
return appdata.settings['readerScreenPicNumberForLandscape'] ?? 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Check if the number of images per page has changed
|
||||||
|
void _checkImagesPerPageChange() {
|
||||||
|
int currentImagesPerPage = imagesPerPage;
|
||||||
|
if (_lastImagesPerPage != currentImagesPerPage) {
|
||||||
|
_adjustPageForImagesPerPageChange(
|
||||||
|
_lastImagesPerPage, currentImagesPerPage);
|
||||||
|
_lastImagesPerPage = currentImagesPerPage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Adjust the page number when the number of images per page changes
|
||||||
|
void _adjustPageForImagesPerPageChange(
|
||||||
|
int oldImagesPerPage, int newImagesPerPage) {
|
||||||
|
int previousImageIndex = (page - 1) * oldImagesPerPage;
|
||||||
|
int newPage = (previousImageIndex ~/ newImagesPerPage) + 1;
|
||||||
|
page = newPage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract mixin class _VolumeListener {
|
||||||
|
bool toNextPage();
|
||||||
|
|
||||||
|
bool toPrevPage();
|
||||||
|
|
||||||
|
VolumeListener? volumeListener;
|
||||||
|
|
||||||
void handleVolumeEvent() {
|
void handleVolumeEvent() {
|
||||||
if (!App.isAndroid) {
|
if (!App.isAndroid) {
|
||||||
@@ -301,12 +330,8 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
|||||||
volumeListener?.cancel();
|
volumeListener?.cancel();
|
||||||
}
|
}
|
||||||
volumeListener = VolumeListener(
|
volumeListener = VolumeListener(
|
||||||
onDown: () {
|
onDown: toNextPage,
|
||||||
toNextPage();
|
onUp: toPrevPage,
|
||||||
},
|
|
||||||
onUp: () {
|
|
||||||
toPrevPage();
|
|
||||||
},
|
|
||||||
)..listen();
|
)..listen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user