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;
|
||||||
@@ -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 {
|
||||||
@@ -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