diff --git a/assets/translation.json b/assets/translation.json index 66f3d85..9f2c097 100644 --- a/assets/translation.json +++ b/assets/translation.json @@ -409,7 +409,7 @@ "Export logs": "导出日志", "Clear specific reader settings for all comics": "清除所有漫画的特殊阅读设置", "Clear specific reader settings for this comic": "清除该漫画的特殊阅读设置", - "Enable comic specific settings": "为每本漫画保存特定设置" + "Enable comic specific settings": "启用此漫画特定设置" }, "zh_TW": { "Home": "首頁", @@ -821,6 +821,6 @@ "Export logs": "匯出日誌", "Clear specific reader settings for all comics": "清除所有漫畫的特殊閱讀設定", "Clear specific reader settings for this comic": "清除該漫畫的特殊閱讀設定", - "Enable comic specific settings": "為每本漫畫保存特定設定" + "Enable comic specific settings": "啟用此漫畫特定設定" } } \ No newline at end of file diff --git a/lib/foundation/appdata.dart b/lib/foundation/appdata.dart index 6998a25..0c7d9f1 100644 --- a/lib/foundation/appdata.dart +++ b/lib/foundation/appdata.dart @@ -152,7 +152,6 @@ class Settings with ChangeNotifier { 'blockedWords': [], 'defaultSearchTarget': null, 'autoPageTurningInterval': 5, // in seconds - 'enableComicSpecificSettings': false, 'readerMode': 'galleryLeftToRight', // values of [ReaderMode] 'readerScreenPicNumberForLandscape': 1, // 1 - 5 'readerScreenPicNumberForPortrait': 1, // 1 - 5 @@ -204,18 +203,19 @@ class Settings with ChangeNotifier { } } - bool haveComicSpecificSettings(String comicId, String sourceKey, String key) { - return _data['comicSpecificSettings']?["$comicId@$sourceKey"]?.containsKey( - key, - ) ?? - false; + void setEnabledComicSpecificSettings(String comicId, String sourceKey, bool enabled) { + setReaderSetting(comicId, sourceKey, "enabled", enabled); + } + + bool isComicSpecificSettingsEnabled(String? comicId, String? sourceKey) { + if (comicId == null || sourceKey == null) { + return false; + } + return _data['comicSpecificSettings']["$comicId@$sourceKey"]?["enabled"] == true; } dynamic getReaderSetting(String comicId, String sourceKey, String key) { - if (key == 'enableComicSpecificSettings') { - return _data['enableComicSpecificSettings']; - } - if (_data['enableComicSpecificSettings'] == false) { + if (!isComicSpecificSettingsEnabled(comicId, sourceKey)) { return _data[key]; } return _data['comicSpecificSettings']["$comicId@$sourceKey"]?[key] ?? @@ -228,16 +228,6 @@ class Settings with ChangeNotifier { String key, dynamic value, ) { - if (key == 'enableComicSpecificSettings') { - _data['enableComicSpecificSettings'] = value; - notifyListeners(); - return; - } - if (_data['enableComicSpecificSettings'] == false) { - _data[key] = value; - notifyListeners(); - return; - } (_data['comicSpecificSettings'] as Map).putIfAbsent( "$comicId@$sourceKey", () => {}, @@ -245,16 +235,8 @@ class Settings with ChangeNotifier { notifyListeners(); } - void resetComicReaderSettings(String comicId, String sourceKey) { - final allComicSettings = _data['comicSpecificSettings'] as Map; - if (allComicSettings.containsKey("$comicId@$sourceKey")) { - allComicSettings.remove("$comicId@$sourceKey"); - } - notifyListeners(); - } - - void resetAllComicReaderSettings() { - _data['comicSpecificSettings'] = >{}; + void resetComicReaderSettings(String key) { + (_data['comicSpecificSettings'] as Map).remove(key); notifyListeners(); } diff --git a/lib/pages/reader/gesture.dart b/lib/pages/reader/gesture.dart index 59e840f..c107ac5 100644 --- a/lib/pages/reader/gesture.dart +++ b/lib/pages/reader/gesture.dart @@ -131,11 +131,11 @@ class _ReaderGestureDetectorState extends AutomaticGlobalState<_ReaderGestureDet } if (context.reader.mode.key.startsWith('gallery')) { if (forward) { - if (!context.reader.toNextPage(reader.cid, reader.type) && !context.reader.isLastChapterOfGroup) { + if (!context.reader.toNextPage() && !context.reader.isLastChapterOfGroup) { context.reader.toNextChapter(); } } else { - if (!context.reader.toPrevPage(reader.cid, reader.type) && !context.reader.isFirstChapterOfGroup) { + if (!context.reader.toPrevPage() && !context.reader.isFirstChapterOfGroup) { context.reader.toPrevChapter(); } } @@ -209,12 +209,12 @@ class _ReaderGestureDetectorState extends AutomaticGlobalState<_ReaderGestureDet isBottom = true; } bool isCenter = false; - var prev = () => context.reader.toPrevPage(context.reader.cid, context.reader.type); - var next = () => context.reader.toNextPage(context.reader.cid, context.reader.type); + var prev = () => context.reader.toPrevPage(); + var next = () => context.reader.toNextPage(); if (appdata.settings.getReaderSetting( reader.cid, reader.type.sourceKey, 'reverseTapToTurnPages')) { - prev = () => context.reader.toNextPage(context.reader.cid, context.reader.type); - next = () => context.reader.toPrevPage(context.reader.cid, context.reader.type); + prev = () => context.reader.toNextPage(); + next = () => context.reader.toPrevPage(); } switch (context.reader.mode) { case ReaderMode.galleryLeftToRight: diff --git a/lib/pages/reader/images.dart b/lib/pages/reader/images.dart index 917f20f..2ac90f3 100644 --- a/lib/pages/reader/images.dart +++ b/lib/pages/reader/images.dart @@ -138,14 +138,14 @@ class _GalleryModeState extends State<_GalleryMode> /// [totalPages] is the total number of pages in the current chapter. /// More than one images can be displayed on one page. int get totalPages { - if (!reader.showSingleImageOnFirstPage(reader.cid, reader.type)) { + if (!reader.showSingleImageOnFirstPage()) { return (reader.images!.length / - reader.imagesPerPage(reader.cid, reader.type)) + reader.imagesPerPage()) .ceil(); } else { return 1 + ((reader.images!.length - 1) / - reader.imagesPerPage(reader.cid, reader.type)) + reader.imagesPerPage()) .ceil(); } } @@ -169,8 +169,8 @@ class _GalleryModeState extends State<_GalleryMode> /// Get the range of images for the given page. [page] is 1-based. (int start, int end) getPageImagesRange(int page) { - var imagesPerPage = reader.imagesPerPage(reader.cid, reader.type); - if (reader.showSingleImageOnFirstPage(reader.cid, reader.type)) { + var imagesPerPage = reader.imagesPerPage(); + if (reader.showSingleImageOnFirstPage()) { if (page == 1) { return (0, 1); } else { @@ -259,7 +259,7 @@ class _GalleryModeState extends State<_GalleryMode> photoViewControllers[index] ??= PhotoViewController(); - if (reader.imagesPerPage(reader.cid, reader.type) == 1 || + if (reader.imagesPerPage() == 1 || pageImages.length == 1) { return PhotoViewGalleryPageOptions( filterQuality: FilterQuality.medium, @@ -301,11 +301,11 @@ class _GalleryModeState extends State<_GalleryMode> onPageChanged: (i) { if (i == 0) { if (reader.isFirstChapterOfGroup || !reader.toPrevChapter()) { - reader.toPage(reader.cid, reader.type, 1); + reader.toPage(1); } } else if (i == totalPages + 1) { if (reader.isLastChapterOfGroup || !reader.toNextChapter()) { - reader.toPage(reader.cid, reader.type, totalPages); + reader.toPage(totalPages); } } else { reader.setPage(i); @@ -485,9 +485,9 @@ class _GalleryModeState extends State<_GalleryMode> keyRepeatTimer = null; } if (forward == true) { - reader.toPage(reader.cid, reader.type, reader.page + 1); + reader.toPage(reader.page + 1); } else if (forward == false) { - reader.toPage(reader.cid, reader.type, reader.page - 1); + reader.toPage(reader.page - 1); } } if (event is KeyRepeatEvent && keyRepeatTimer == null) { @@ -500,9 +500,9 @@ class _GalleryModeState extends State<_GalleryMode> timer.cancel(); return; } else if (forward == true) { - reader.toPage(reader.cid, reader.type, reader.page + 1); + reader.toPage(reader.page + 1); } else if (forward == false) { - reader.toPage(reader.cid, reader.type, reader.page - 1); + reader.toPage(reader.page - 1); } }, ); @@ -534,7 +534,7 @@ class _GalleryModeState extends State<_GalleryMode> @override String? getImageKeyByOffset(Offset offset) { String? imageKey; - if (reader.imagesPerPage(reader.cid, reader.type) == 1) { + if (reader.imagesPerPage() == 1) { imageKey = reader.images![reader.page - 1]; } else { for (var imageState in imageStates) { diff --git a/lib/pages/reader/reader.dart b/lib/pages/reader/reader.dart index 6b6f9d8..ce5de8c 100644 --- a/lib/pages/reader/reader.dart +++ b/lib/pages/reader/reader.dart @@ -115,15 +115,17 @@ class _ReaderState extends State if (images == null) { return 1; } - if (!showSingleImageOnFirstPage(cid, type)) { - return (images!.length / imagesPerPage(cid, type)).ceil(); + if (!showSingleImageOnFirstPage()) { + return (images!.length / imagesPerPage()).ceil(); } else { - return 1 + ((images!.length - 1) / imagesPerPage(cid, type)).ceil(); + return 1 + ((images!.length - 1) / imagesPerPage()).ceil(); } } + @override ComicType get type => widget.type; + @override String get cid => widget.cid; String get eid => widget.chapters?.ids.elementAtOrNull(chapter - 1) ?? '0'; @@ -169,7 +171,7 @@ class _ReaderState extends State SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive); } if (appdata.settings.getReaderSetting(cid, type.sourceKey, 'enableTurnPageByVolumeKey')) { - handleVolumeEvent(cid, type); + handleVolumeEvent(); } setImageCacheSize(); Future.delayed(const Duration(milliseconds: 200), () { @@ -184,11 +186,11 @@ class _ReaderState extends State void didChangeDependencies() { super.didChangeDependencies(); if (!_isInitialized) { - initImagesPerPage(cid, type, widget.initialPage ?? 1); + initImagesPerPage(widget.initialPage ?? 1); _isInitialized = true; } else { // For orientation changed - _checkImagesPerPageChange(cid, type); + _checkImagesPerPageChange(); } initReaderWindow(); } @@ -230,7 +232,7 @@ class _ReaderState extends State @override Widget build(BuildContext context) { - _checkImagesPerPageChange(cid, type); + _checkImagesPerPageChange(); return KeyboardListener( focusNode: focusNode, autofocus: true, @@ -275,13 +277,13 @@ class _ReaderState extends State history!.page = images?.length ?? 1; } else { /// Record the first image of the page - if (!showSingleImageOnFirstPage(cid, type) || imagesPerPage(cid, type) == 1) { - history!.page = (page - 1) * imagesPerPage(cid, type) + 1; + if (!showSingleImageOnFirstPage() || imagesPerPage() == 1) { + history!.page = (page - 1) * imagesPerPage() + 1; } else { if (page == 1) { history!.page = 1; } else { - history!.page = (page - 2) * imagesPerPage(cid, type) + 2; + history!.page = (page - 2) * imagesPerPage() + 2; } } } @@ -364,23 +366,27 @@ abstract mixin class _ImagePerPageHandler { ReaderMode get mode; - void initImagesPerPage(String cid, ComicType type, int initialPage) { - _lastImagesPerPage = imagesPerPage(cid, type); + String get cid; + + ComicType get type; + + void initImagesPerPage(int initialPage) { + _lastImagesPerPage = imagesPerPage(); _lastOrientation = isPortrait; - if (imagesPerPage(cid, type) != 1) { - if (showSingleImageOnFirstPage(cid, type)) { - page = ((initialPage - 1) / imagesPerPage(cid, type)).ceil() + 1; + if (imagesPerPage() != 1) { + if (showSingleImageOnFirstPage()) { + page = ((initialPage - 1) / imagesPerPage()).ceil() + 1; } else { - page = (initialPage / imagesPerPage(cid, type)).ceil(); + page = (initialPage / imagesPerPage()).ceil(); } } } - bool showSingleImageOnFirstPage(String cid, ComicType type) => + bool showSingleImageOnFirstPage() => appdata.settings.getReaderSetting(cid, type.sourceKey, 'showSingleImageOnFirstPage'); /// The number of images displayed on one screen - int imagesPerPage(String cid, ComicType type) { + int imagesPerPage() { if (mode.isContinuous) return 1; if (isPortrait) { return appdata.settings.getReaderSetting(cid, type.sourceKey, 'readerScreenPicNumberForPortrait') ?? 1; @@ -390,23 +396,21 @@ abstract mixin class _ImagePerPageHandler { } /// Check if the number of images per page has changed - void _checkImagesPerPageChange(String cid, ComicType type) { - int currentImagesPerPage = imagesPerPage(cid, type); + void _checkImagesPerPageChange() { + int currentImagesPerPage = imagesPerPage(); bool currentOrientation = isPortrait; if (_lastImagesPerPage != currentImagesPerPage || _lastOrientation != currentOrientation) { - _adjustPageForImagesPerPageChange( - cid, type, _lastImagesPerPage, currentImagesPerPage); + _adjustPageForImagesPerPageChange(_lastImagesPerPage, currentImagesPerPage); _lastImagesPerPage = currentImagesPerPage; _lastOrientation = currentOrientation; } } /// Adjust the page number when the number of images per page changes - void _adjustPageForImagesPerPageChange( - String cid, ComicType type, int oldImagesPerPage, int newImagesPerPage) { + void _adjustPageForImagesPerPageChange(int oldImagesPerPage, int newImagesPerPage) { int previousImageIndex = 1; - if (!showSingleImageOnFirstPage(cid, type) || oldImagesPerPage == 1) { + if (!showSingleImageOnFirstPage() || oldImagesPerPage == 1) { previousImageIndex = (page - 1) * oldImagesPerPage + 1; } else { if (page == 1) { @@ -418,7 +422,7 @@ abstract mixin class _ImagePerPageHandler { int newPage; if (newImagesPerPage != 1) { - if (showSingleImageOnFirstPage(cid, type)) { + if (showSingleImageOnFirstPage()) { newPage = ((previousImageIndex - 1) / newImagesPerPage).ceil() + 1; } else { newPage = (previousImageIndex / newImagesPerPage).ceil(); @@ -432,9 +436,9 @@ abstract mixin class _ImagePerPageHandler { } abstract mixin class _VolumeListener { - bool toNextPage(String cid, ComicType type); + bool toNextPage(); - bool toPrevPage(String cid, ComicType type); + bool toPrevPage(); bool toNextChapter(); @@ -442,19 +446,19 @@ abstract mixin class _VolumeListener { VolumeListener? volumeListener; - void onDown(String cid, ComicType type) { - if (!toNextPage(cid, type)) { + void onDown() { + if (!toNextPage()) { toNextChapter(); } } - void onUp(String cid, ComicType type) { - if (!toPrevPage(cid, type)) { + void onUp() { + if (!toPrevPage()) { toPrevChapter(); } } - void handleVolumeEvent(String cid, ComicType type) { + void handleVolumeEvent() { if (!App.isAndroid) { // Currently only support Android return; @@ -463,8 +467,8 @@ abstract mixin class _VolumeListener { volumeListener?.cancel(); } volumeListener = VolumeListener( - onDown: () => onDown(cid, type), - onUp: () => onUp(cid, type), + onDown: onDown, + onUp: onUp, )..listen(); } @@ -494,6 +498,10 @@ abstract mixin class _ReaderLocation { bool get isLoading; + String get cid; + + ComicType get type; + void update(); bool enablePageAnimation(String cid, ComicType type) => appdata.settings.getReaderSetting(cid, type.sourceKey, 'enablePageAnimation'); @@ -515,18 +523,18 @@ abstract mixin class _ReaderLocation { } /// Returns true if the page is changed - bool toNextPage(String cid, ComicType type) { - return toPage(cid, type, page + 1); + bool toNextPage() { + return toPage(page + 1); } /// Returns true if the page is changed - bool toPrevPage(String cid, ComicType type) { - return toPage(cid, type, page - 1); + bool toPrevPage() { + return toPage(page - 1); } int _animationCount = 0; - bool toPage(String cid, ComicType type, int page) { + bool toPage(int page) { if (_validatePage(page)) { if (page == this.page && page != 1 && page != maxPage) { return false; @@ -582,7 +590,7 @@ abstract mixin class _ReaderLocation { if (page == maxPage) { autoPageTurningTimer!.cancel(); } - toNextPage(cid, type); + toNextPage(); }); } } diff --git a/lib/pages/reader/scaffold.dart b/lib/pages/reader/scaffold.dart index 7a5b629..e1257aa 100644 --- a/lib/pages/reader/scaffold.dart +++ b/lib/pages/reader/scaffold.dart @@ -453,18 +453,10 @@ class _ReaderScaffoldState extends State<_ReaderScaffold> { onPressed: () => !isReversed ? context.reader.chapter > 1 ? context.reader.toPrevChapter() - : context.reader.toPage( - context.reader.cid, - context.reader.type, - 1, - ) + : context.reader.toPage(1) : context.reader.chapter < context.reader.maxChapter ? context.reader.toNextChapter() - : context.reader.toPage( - context.reader.cid, - context.reader.type, - context.reader.maxPage, - ), + : context.reader.toPage(context.reader.maxPage), icon: const Icon(Icons.first_page), ), Expanded(child: buildSlider()), @@ -472,18 +464,10 @@ class _ReaderScaffoldState extends State<_ReaderScaffold> { onPressed: () => !isReversed ? context.reader.chapter < context.reader.maxChapter ? context.reader.toNextChapter() - : context.reader.toPage( - context.reader.cid, - context.reader.type, - context.reader.maxPage, - ) + : context.reader.toPage(context.reader.maxPage) : context.reader.chapter > 1 ? context.reader.toPrevChapter() - : context.reader.toPage( - context.reader.cid, - context.reader.type, - 1, - ), + : context.reader.toPage(1), icon: const Icon(Icons.last_page), ), const SizedBox(width: 8), @@ -546,11 +530,7 @@ class _ReaderScaffoldState extends State<_ReaderScaffold> { reversed: isReversed, divisions: (context.reader.maxPage - 1).clamp(2, 1 << 16), onChanged: (i) { - context.reader.toPage( - context.reader.cid, - context.reader.type, - i.toInt(), - ); + context.reader.toPage(i.toInt()); }, ); } @@ -660,10 +640,7 @@ class _ReaderScaffoldState extends State<_ReaderScaffold> { context.reader.type.sourceKey, key, )) { - context.reader.handleVolumeEvent( - context.reader.cid, - context.reader.type, - ); + context.reader.handleVolumeEvent(); } else { context.reader.stopVolumeEvent(); } diff --git a/lib/pages/settings/reader.dart b/lib/pages/settings/reader.dart index 770a3db..df036c2 100644 --- a/lib/pages/settings/reader.dart +++ b/lib/pages/settings/reader.dart @@ -19,17 +19,57 @@ class ReaderSettings extends StatefulWidget { class _ReaderSettingsState extends State { @override Widget build(BuildContext context) { + final comicId = widget.comicId; + final sourceKey = widget.comicSource; + final key = "$comicId@$sourceKey"; + + bool isEnabledSpecificSettings = + comicId != null && + appdata.settings.isComicSpecificSettingsEnabled(comicId, sourceKey); + return SmoothCustomScrollView( slivers: [ SliverAppbar(title: Text("Reading".tl)), + if (comicId != null && sourceKey != null) + SliverMainAxisGroup( + slivers: [ + SwitchListTile( + title: Text("Enable comic specific settings".tl), + value: isEnabledSpecificSettings, + onChanged: (b) { + setState(() { + appdata.settings.setEnabledComicSpecificSettings( + comicId, + sourceKey, + b, + ); + }); + }, + ).toSliver(), + if (isEnabledSpecificSettings) + Center( + child: TextButton( + onPressed: () { + setState(() { + appdata.settings.resetComicReaderSettings(key); + }); + }, + child: Text( + "Clear specific reader settings for this comic".tl, + ), + ), + ).toSliver(), + Divider().toSliver(), + ], + ), _SwitchSetting( title: "Tap to turn Pages".tl, settingKey: "enableTapToTurnPages", onChanged: () { widget.onChanged?.call("enableTapToTurnPages"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SwitchSetting( title: "Reverse tap to turn Pages".tl, @@ -37,8 +77,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("reverseTapToTurnPages"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SwitchSetting( title: "Page animation".tl, @@ -46,15 +86,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("enablePageAnimation"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, - ).toSliver(), - _SwitchSetting( - title: "Enable comic specific settings".tl, - settingKey: "enableComicSpecificSettings", - onChanged: () { - widget.onChanged?.call("enableComicSpecificSettings"); - }, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), SelectSetting( title: "Reading mode".tl, @@ -78,8 +111,8 @@ class _ReaderSettingsState extends State { } widget.onChanged?.call("readerMode"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SliderSetting( title: "Auto page turning interval".tl, @@ -91,8 +124,8 @@ class _ReaderSettingsState extends State { setState(() {}); widget.onChanged?.call("autoPageTurningInterval"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), SliverAnimatedVisibility( visible: appdata.settings['readerMode']!.startsWith('gallery'), @@ -108,8 +141,8 @@ class _ReaderSettingsState extends State { setState(() {}); widget.onChanged?.call("readerScreenPicNumberForLandscape"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ), ), SliverAnimatedVisibility( @@ -125,8 +158,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("readerScreenPicNumberForPortrait"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ), ), SliverAnimatedVisibility( @@ -140,8 +173,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("showSingleImageOnFirstPage"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ), ), _SwitchSetting( @@ -151,8 +184,8 @@ class _ReaderSettingsState extends State { setState(() {}); widget.onChanged?.call('enableDoubleTapToZoom'); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SwitchSetting( title: 'Long press to zoom'.tl, @@ -161,8 +194,8 @@ class _ReaderSettingsState extends State { setState(() {}); widget.onChanged?.call('enableLongPressToZoom'); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), SliverAnimatedVisibility( visible: appdata.settings['enableLongPressToZoom'] == true, @@ -173,8 +206,8 @@ class _ReaderSettingsState extends State { "press": "Press position".tl, "center": "Screen center".tl, }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ), ), _SwitchSetting( @@ -184,8 +217,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call('limitImageWidth'); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), if (App.isAndroid) _SwitchSetting( @@ -194,8 +227,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call('enableTurnPageByVolumeKey'); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SwitchSetting( title: "Display time & battery info in reader".tl, @@ -203,8 +236,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("enableClockAndBatteryInfoInReader"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SwitchSetting( title: "Show system status bar".tl, @@ -212,8 +245,8 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("showSystemStatusBar"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), SelectSetting( title: "Quick collect image".tl, @@ -229,8 +262,8 @@ class _ReaderSettingsState extends State { help: "On the image browsing page, you can quickly collect images by sliding horizontally or vertically according to your reading mode" .tl, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _CallbackSetting( title: "Custom Image Processing".tl, @@ -243,8 +276,8 @@ class _ReaderSettingsState extends State { interval: 1, min: 1, max: 16, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), _SwitchSetting( title: "Show Page Number".tl, @@ -252,39 +285,9 @@ class _ReaderSettingsState extends State { onChanged: () { widget.onChanged?.call("showPageNumberInReader"); }, - comicId: widget.comicId, - comicSource: widget.comicSource, + comicId: isEnabledSpecificSettings ? widget.comicId : null, + comicSource: isEnabledSpecificSettings ? widget.comicSource : null, ).toSliver(), - // reset button - SliverToBoxAdapter( - child: TextButton( - onPressed: () { - if (widget.comicId == null) { - appdata.settings.resetAllComicReaderSettings(); - } else { - var keys = appdata - .settings['comicSpecificSettings']["${widget.comicId}@${widget.comicSource}"] - ?.keys; - appdata.settings.resetComicReaderSettings( - widget.comicId!, - widget.comicSource!, - ); - if (keys != null) { - setState(() {}); - for (var key in keys) { - widget.onChanged?.call(key); - } - } - } - }, - child: Text( - (widget.comicId == null - ? "Clear specific reader settings for all comics" - : "Clear specific reader settings for this comic") - .tl, - ), - ), - ), ], ); }