mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-05-06 03:29:06 +00:00
add incognito mode & global color for ListTile icon
This commit is contained in:
parent
edf9958b8f
commit
e71a28f21e
18 changed files with 268 additions and 103 deletions
|
|
@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
import 'package:mangayomi/constant.dart';
|
import 'package:mangayomi/utils/constant.dart';
|
||||||
import 'package:mangayomi/models/manga_history.dart';
|
import 'package:mangayomi/models/manga_history.dart';
|
||||||
import 'package:mangayomi/models/model_manga.dart';
|
import 'package:mangayomi/models/model_manga.dart';
|
||||||
import 'package:mangayomi/router/router.dart';
|
import 'package:mangayomi/router/router.dart';
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
import 'package:mangayomi/constant.dart';
|
import 'package:mangayomi/utils/constant.dart';
|
||||||
import 'package:mangayomi/models/manga_history.dart';
|
import 'package:mangayomi/models/manga_history.dart';
|
||||||
import 'package:mangayomi/models/model_manga.dart';
|
import 'package:mangayomi/models/model_manga.dart';
|
||||||
import 'package:mangayomi/source/source_model.dart';
|
import 'package:mangayomi/source/source_model.dart';
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import 'package:mangayomi/providers/hive_provider.dart';
|
||||||
import 'package:mangayomi/services/get_popular_manga.dart';
|
import 'package:mangayomi/services/get_popular_manga.dart';
|
||||||
import 'package:mangayomi/services/http_res_to_dom_html.dart';
|
import 'package:mangayomi/services/http_res_to_dom_html.dart';
|
||||||
import 'package:mangayomi/source/source_model.dart';
|
import 'package:mangayomi/source/source_model.dart';
|
||||||
|
import 'package:mangayomi/views/more/settings/providers/incognito_mode_state_provider.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:flutter_js/flutter_js.dart';
|
import 'package:flutter_js/flutter_js.dart';
|
||||||
|
|
@ -34,7 +35,7 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
||||||
List hiveUrl = ref.watch(hiveBoxMangaInfo).get(
|
List hiveUrl = ref.watch(hiveBoxMangaInfo).get(
|
||||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||||
defaultValue: []);
|
defaultValue: []);
|
||||||
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
Directory? pathh;
|
Directory? pathh;
|
||||||
if (Platform.isWindows) {
|
if (Platform.isWindows) {
|
||||||
pathh = await getApplicationDocumentsDirectory();
|
pathh = await getApplicationDocumentsDirectory();
|
||||||
|
|
@ -44,9 +45,13 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
||||||
|
|
||||||
path = Directory(
|
path = Directory(
|
||||||
"${pathh!.path}/${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}/");
|
"${pathh!.path}/${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}/");
|
||||||
if (hiveUrl.isNotEmpty) {
|
|
||||||
urll = hiveUrl;
|
if (!incognitoMode) {
|
||||||
|
if (hiveUrl.isNotEmpty) {
|
||||||
|
urll = hiveUrl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********/
|
/*********/
|
||||||
/*comick*/
|
/*comick*/
|
||||||
/********/
|
/********/
|
||||||
|
|
@ -73,9 +78,11 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
||||||
urll.add(url.url);
|
urll.add(url.url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ref.watch(hiveBoxMangaInfo).put(
|
if (!incognitoMode) {
|
||||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
ref.watch(hiveBoxMangaInfo).put(
|
||||||
urll);
|
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||||
|
urll);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*************/
|
/*************/
|
||||||
/*mangathemesia*/
|
/*mangathemesia*/
|
||||||
|
|
@ -123,9 +130,11 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
||||||
urll.add(tt);
|
urll.add(tt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ref.watch(hiveBoxMangaInfo).put(
|
if (!incognitoMode) {
|
||||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
ref.watch(hiveBoxMangaInfo).put(
|
||||||
urll);
|
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||||
|
urll);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/***********/
|
/***********/
|
||||||
|
|
@ -238,11 +247,13 @@ Future<GetMangaChapterUrlModel> getMangaChapterUrl(
|
||||||
deobfuscatedScript.substring(imageLinkStartPos, imageLinkEndPos);
|
deobfuscatedScript.substring(imageLinkStartPos, imageLinkEndPos);
|
||||||
urll.add("https:$baseLink$imageLink");
|
urll.add("https:$baseLink$imageLink");
|
||||||
}
|
}
|
||||||
log(urll.toString());
|
|
||||||
flutterJs.dispose();
|
flutterJs.dispose();
|
||||||
ref.watch(hiveBoxMangaInfo).put(
|
if (!incognitoMode) {
|
||||||
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
ref.watch(hiveBoxMangaInfo).put(
|
||||||
urll);
|
"${modelManga.source}/${modelManga.name}/${modelManga.chapterTitle![index]}-pageurl",
|
||||||
|
urll);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
5
lib/utils/colors.dart
Normal file
5
lib/utils/colors.dart
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
generalColor(BuildContext context) {
|
||||||
|
return Theme.of(context).toggleButtonsTheme.color;
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mangayomi/models/model_manga.dart';
|
import 'package:mangayomi/models/model_manga.dart';
|
||||||
import 'package:mangayomi/utils/cached_network.dart';
|
import 'package:mangayomi/utils/cached_network.dart';
|
||||||
|
import 'package:mangayomi/utils/colors.dart';
|
||||||
import 'package:mangayomi/views/widgets/bottom_text_widget.dart';
|
import 'package:mangayomi/views/widgets/bottom_text_widget.dart';
|
||||||
import 'package:mangayomi/views/widgets/cover_view_widget.dart';
|
import 'package:mangayomi/views/widgets/cover_view_widget.dart';
|
||||||
import 'package:mangayomi/views/widgets/gridview_widget.dart';
|
import 'package:mangayomi/views/widgets/gridview_widget.dart';
|
||||||
|
|
@ -51,7 +52,7 @@ class LibraryGridViewWidget extends StatelessWidget {
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(3),
|
borderRadius: BorderRadius.circular(3),
|
||||||
color: Theme.of(context).cardColor),
|
color: generalColor(context),),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(1),
|
padding: const EdgeInsets.all(1),
|
||||||
child: Text(entriesManga[index]
|
child: Text(entriesManga[index]
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mangayomi/models/model_manga.dart';
|
import 'package:mangayomi/models/model_manga.dart';
|
||||||
import 'package:mangayomi/utils/cached_network.dart';
|
import 'package:mangayomi/utils/cached_network.dart';
|
||||||
|
import 'package:mangayomi/utils/colors.dart';
|
||||||
import 'package:mangayomi/utils/media_query.dart';
|
import 'package:mangayomi/utils/media_query.dart';
|
||||||
import 'package:mangayomi/views/widgets/listview_widget.dart';
|
import 'package:mangayomi/views/widgets/listview_widget.dart';
|
||||||
|
|
||||||
|
|
@ -38,7 +39,7 @@ class LibraryListViewWidget extends StatelessWidget {
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 45,
|
height: 45,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Theme.of(context).canvasColor,
|
color: generalColor(context),
|
||||||
borderRadius: BorderRadius.circular(5)),
|
borderRadius: BorderRadius.circular(5)),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import 'package:mangayomi/models/model_manga.dart';
|
||||||
import 'package:mangayomi/providers/hive_provider.dart';
|
import 'package:mangayomi/providers/hive_provider.dart';
|
||||||
import 'package:mangayomi/utils/media_query.dart';
|
import 'package:mangayomi/utils/media_query.dart';
|
||||||
import 'package:mangayomi/views/manga/detail/manga_detail_view.dart';
|
import 'package:mangayomi/views/manga/detail/manga_detail_view.dart';
|
||||||
|
import 'package:mangayomi/views/more/settings/providers/incognito_mode_state_provider.dart';
|
||||||
|
|
||||||
final isExtended = StateProvider.autoDispose<bool>((ref) {
|
final isExtended = StateProvider.autoDispose<bool>((ref) {
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -62,7 +63,9 @@ class _MangaDetailsViewState extends ConsumerState<MangaDetailsView> {
|
||||||
final entries = value.get(
|
final entries = value.get(
|
||||||
"${widget.modelManga.source}/${widget.modelManga.name}-chapter_index",
|
"${widget.modelManga.source}/${widget.modelManga.name}-chapter_index",
|
||||||
defaultValue: '');
|
defaultValue: '');
|
||||||
if (entries.isNotEmpty) {
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
|
|
||||||
|
if (entries.isNotEmpty && !incognitoMode) {
|
||||||
return Consumer(builder: (context, ref, child) {
|
return Consumer(builder: (context, ref, child) {
|
||||||
return Row(
|
return Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
|
@ -118,7 +121,7 @@ class _MangaDetailsViewState extends ConsumerState<MangaDetailsView> {
|
||||||
height: 50,
|
height: 50,
|
||||||
width: !ref.watch(isExtended)
|
width: !ref.watch(isExtended)
|
||||||
? 60
|
? 60
|
||||||
: mediaWidth(context, 0.25),
|
: mediaWidth(context, 0.3),
|
||||||
duration: const Duration(milliseconds: 300),
|
duration: const Duration(milliseconds: 300),
|
||||||
curve: Curves.easeIn,
|
curve: Curves.easeIn,
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
|
|
@ -137,7 +140,7 @@ class _MangaDetailsViewState extends ConsumerState<MangaDetailsView> {
|
||||||
children: [
|
children: [
|
||||||
AnimatedContainer(
|
AnimatedContainer(
|
||||||
curve: Curves.easeIn,
|
curve: Curves.easeIn,
|
||||||
width: !ref.watch(isExtended) ? 0 : 30,
|
width: !ref.watch(isExtended) ? 0 : 40,
|
||||||
duration: const Duration(milliseconds: 300),
|
duration: const Duration(milliseconds: 300),
|
||||||
child: const Text(
|
child: const Text(
|
||||||
"Read",
|
"Read",
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ class _MangaChapterPageGalleryState
|
||||||
_itemScrollController.scrollTo(
|
_itemScrollController.scrollTo(
|
||||||
curve: Curves.ease,
|
curve: Curves.ease,
|
||||||
index: ok,
|
index: ok,
|
||||||
duration: Duration(milliseconds: isSlide ? 2 : 150));
|
duration: Duration(milliseconds: isSlide ? 2 : 150));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (ok != -1) {
|
if (ok != -1) {
|
||||||
|
|
@ -191,14 +191,14 @@ class _MangaChapterPageGalleryState
|
||||||
} else {
|
} else {
|
||||||
if (_selectedValue == ReaderMode.verticalContinuous ||
|
if (_selectedValue == ReaderMode.verticalContinuous ||
|
||||||
_selectedValue == ReaderMode.webtoon) {
|
_selectedValue == ReaderMode.webtoon) {
|
||||||
if (widget.readerController.getPageLength() != ok) {
|
if (widget.readerController.getPageLength(widget.url) != ok) {
|
||||||
_itemScrollController.scrollTo(
|
_itemScrollController.scrollTo(
|
||||||
curve: Curves.ease,
|
curve: Curves.ease,
|
||||||
index: ok,
|
index: ok,
|
||||||
duration: Duration(milliseconds: isSlide ? 2 : 150));
|
duration: Duration(milliseconds: isSlide ? 2 : 150));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (widget.readerController.getPageLength() != ok) {
|
if (widget.readerController.getPageLength(widget.url) != ok) {
|
||||||
if (_extendedController.hasClients) {
|
if (_extendedController.hasClients) {
|
||||||
_extendedController.animateToPage(ok.toInt(),
|
_extendedController.animateToPage(ok.toInt(),
|
||||||
duration: Duration(milliseconds: isSlide ? 2 : 150),
|
duration: Duration(milliseconds: isSlide ? 2 : 150),
|
||||||
|
|
@ -471,7 +471,7 @@ class _MangaChapterPageGalleryState
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 12),
|
padding: const EdgeInsets.only(left: 12),
|
||||||
child: Text(
|
child: Text(
|
||||||
"${widget.readerController.getPageLength()}",
|
"${widget.readerController.getPageLength(widget.url)}",
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 15.0,
|
fontSize: 15.0,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
|
|
@ -489,7 +489,7 @@ class _MangaChapterPageGalleryState
|
||||||
},
|
},
|
||||||
divisions: max(
|
divisions: max(
|
||||||
widget.readerController
|
widget.readerController
|
||||||
.getPageLength() -
|
.getPageLength(widget.url) -
|
||||||
1,
|
1,
|
||||||
1),
|
1),
|
||||||
value: ref
|
value: ref
|
||||||
|
|
@ -499,7 +499,7 @@ class _MangaChapterPageGalleryState
|
||||||
.toDouble(),
|
.toDouble(),
|
||||||
min: 0,
|
min: 0,
|
||||||
max: (widget.readerController
|
max: (widget.readerController
|
||||||
.getPageLength() -
|
.getPageLength(widget.url) -
|
||||||
1)
|
1)
|
||||||
.toDouble(),
|
.toDouble(),
|
||||||
),
|
),
|
||||||
|
|
@ -520,7 +520,7 @@ class _MangaChapterPageGalleryState
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 12),
|
padding: const EdgeInsets.only(right: 12),
|
||||||
child: Text(
|
child: Text(
|
||||||
"${widget.readerController.getPageLength()}",
|
"${widget.readerController.getPageLength(widget.url)}",
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 15.0,
|
fontSize: 15.0,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
|
|
@ -647,7 +647,7 @@ class _MangaChapterPageGalleryState
|
||||||
? Align(
|
? Align(
|
||||||
alignment: Alignment.bottomCenter,
|
alignment: Alignment.bottomCenter,
|
||||||
child: Text(
|
child: Text(
|
||||||
'${ref.watch(currentIndexProvider(widget.readerController.mangaReaderModel)) + 1} / ${widget.readerController.getPageLength()}',
|
'${ref.watch(currentIndexProvider(widget.readerController.mangaReaderModel)) + 1} / ${widget.readerController.getPageLength(widget.url)}',
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 12.0,
|
fontSize: 12.0,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
|
|
@ -887,7 +887,8 @@ class _MangaChapterPageGalleryState
|
||||||
minCacheExtent: 8 * (MediaQuery.of(context).size.height),
|
minCacheExtent: 8 * (MediaQuery.of(context).size.height),
|
||||||
initialScrollIndex:
|
initialScrollIndex:
|
||||||
widget.readerController.getPageIndex(),
|
widget.readerController.getPageIndex(),
|
||||||
itemCount: widget.readerController.getPageLength(),
|
itemCount:
|
||||||
|
widget.readerController.getPageLength(widget.url),
|
||||||
itemScrollController: _itemScrollController,
|
itemScrollController: _itemScrollController,
|
||||||
itemPositionsListener: _itemPositionsListener,
|
itemPositionsListener: _itemPositionsListener,
|
||||||
itemBuilder: (context, index) => GestureDetector(
|
itemBuilder: (context, index) => GestureDetector(
|
||||||
|
|
@ -903,7 +904,8 @@ class _MangaChapterPageGalleryState
|
||||||
url: widget.url[index],
|
url: widget.url[index],
|
||||||
path: widget.path,
|
path: widget.path,
|
||||||
chapter: widget.readerController.getChapterTitle(),
|
chapter: widget.readerController.getChapterTitle(),
|
||||||
length: widget.readerController.getPageLength(),
|
length:
|
||||||
|
widget.readerController.getPageLength(widget.url),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
separatorBuilder: (_, __) => Divider(
|
separatorBuilder: (_, __) => Divider(
|
||||||
|
|
@ -931,7 +933,8 @@ class _MangaChapterPageGalleryState
|
||||||
url: widget.url[index],
|
url: widget.url[index],
|
||||||
path: widget.path,
|
path: widget.path,
|
||||||
chapter: widget.readerController.getChapterTitle(),
|
chapter: widget.readerController.getChapterTitle(),
|
||||||
length: widget.readerController.getPageLength(),
|
length:
|
||||||
|
widget.readerController.getPageLength(widget.url),
|
||||||
loadStateChanged: (ExtendedImageState state) {
|
loadStateChanged: (ExtendedImageState state) {
|
||||||
if (state.extendedImageLoadState ==
|
if (state.extendedImageLoadState ==
|
||||||
LoadState.loading) {
|
LoadState.loading) {
|
||||||
|
|
@ -1055,7 +1058,8 @@ class _MangaChapterPageGalleryState
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemCount: widget.readerController.getPageLength(),
|
itemCount:
|
||||||
|
widget.readerController.getPageLength(widget.url),
|
||||||
onPageChanged: _onPageChanged)),
|
onPageChanged: _onPageChanged)),
|
||||||
_gestureRightLeft(),
|
_gestureRightLeft(),
|
||||||
_gestureTopBottom(),
|
_gestureTopBottom(),
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:mangayomi/models/manga_history.dart';
|
||||||
import 'package:mangayomi/models/manga_reader.dart';
|
import 'package:mangayomi/models/manga_reader.dart';
|
||||||
import 'package:mangayomi/models/model_manga.dart';
|
import 'package:mangayomi/models/model_manga.dart';
|
||||||
import 'package:mangayomi/providers/hive_provider.dart';
|
import 'package:mangayomi/providers/hive_provider.dart';
|
||||||
|
import 'package:mangayomi/views/more/settings/providers/incognito_mode_state_provider.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
part 'reader_controller_provider.g.dart';
|
part 'reader_controller_provider.g.dart';
|
||||||
|
|
@ -24,9 +25,13 @@ enum ReaderMode {
|
||||||
class CurrentIndex extends _$CurrentIndex {
|
class CurrentIndex extends _$CurrentIndex {
|
||||||
@override
|
@override
|
||||||
int build(MangaReaderModel mangaReaderModel) {
|
int build(MangaReaderModel mangaReaderModel) {
|
||||||
return ref.watch(hiveBoxMangaInfo).get(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${mangaReaderModel.modelManga.source}/${mangaReaderModel.modelManga.name}/${mangaReaderModel.modelManga.chapterTitle![mangaReaderModel.index]}-page_index",
|
if (!incognitoMode) {
|
||||||
defaultValue: 0);
|
return ref.watch(hiveBoxMangaInfo).get(
|
||||||
|
"${mangaReaderModel.modelManga.source}/${mangaReaderModel.modelManga.name}/${mangaReaderModel.modelManga.chapterTitle![mangaReaderModel.index]}-page_index",
|
||||||
|
defaultValue: 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
setCurrentIndex(int currentIndex) {
|
setCurrentIndex(int currentIndex) {
|
||||||
|
|
@ -44,16 +49,20 @@ class ReaderController extends _$ReaderController {
|
||||||
}
|
}
|
||||||
|
|
||||||
ReaderMode getReaderMode() {
|
ReaderMode getReaderMode() {
|
||||||
return ref.watch(hiveBoxReaderMode).get(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
|
if (!incognitoMode) {
|
||||||
|
return ref.watch(hiveBoxReaderMode).get(
|
||||||
|
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
||||||
|
defaultValue: null) !=
|
||||||
|
null
|
||||||
|
? ref.watch(hiveBoxReaderMode).get(
|
||||||
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
||||||
defaultValue: null) !=
|
)!
|
||||||
null
|
: ref
|
||||||
? ref.watch(hiveBoxReaderMode).get(
|
.watch(hiveBoxReaderMode)
|
||||||
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
.get("globalMangaReaderModeValue", defaultValue: ReaderMode.ltr)!;
|
||||||
)!
|
}
|
||||||
: ref
|
return ReaderMode.vertical;
|
||||||
.watch(hiveBoxReaderMode)
|
|
||||||
.get("globalMangaReaderModeValue", defaultValue: ReaderMode.ltr)!;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String getReaderModeValue(ReaderMode readerMode) {
|
String getReaderModeValue(ReaderMode readerMode) {
|
||||||
|
|
@ -69,29 +78,42 @@ class ReaderController extends _$ReaderController {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setReaderMode(ReaderMode newReaderMode) {
|
void setReaderMode(ReaderMode newReaderMode) {
|
||||||
ref.watch(hiveBoxReaderMode).put(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
if (!incognitoMode) {
|
||||||
newReaderMode);
|
ref.watch(hiveBoxReaderMode).put(
|
||||||
|
"${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue",
|
||||||
|
newReaderMode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setShowPageNumber(bool value) {
|
void setShowPageNumber(bool value) {
|
||||||
ref
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
.watch(hiveBoxMangaInfo)
|
if (!incognitoMode) {
|
||||||
.put("${getSourceName()}/${getMangaName()}-showPagesNumber", value);
|
ref
|
||||||
|
.watch(hiveBoxMangaInfo)
|
||||||
|
.put("${getSourceName()}/${getMangaName()}-showPagesNumber", value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getShowPageNumber() {
|
bool getShowPageNumber() {
|
||||||
return ref.watch(hiveBoxMangaInfo).get(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${getSourceName()}/${getMangaName()}-showPagesNumber",
|
if (!incognitoMode) {
|
||||||
defaultValue: true);
|
return ref.watch(hiveBoxMangaInfo).get(
|
||||||
|
"${getSourceName()}/${getMangaName()}-showPagesNumber",
|
||||||
|
defaultValue: true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMangaHistoryUpdate() {
|
void setMangaHistoryUpdate() {
|
||||||
ref.watch(hiveBoxMangaHistory).put(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
mangaReaderModel.modelManga.link,
|
if (!incognitoMode) {
|
||||||
MangaHistoryModel(
|
ref.watch(hiveBoxMangaHistory).put(
|
||||||
date: DateTime.now().toString(),
|
mangaReaderModel.modelManga.link,
|
||||||
modelManga: mangaReaderModel.modelManga));
|
MangaHistoryModel(
|
||||||
|
date: DateTime.now().toString(),
|
||||||
|
modelManga: mangaReaderModel.modelManga));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int getChapterIndex() {
|
int getChapterIndex() {
|
||||||
|
|
@ -99,28 +121,42 @@ class ReaderController extends _$ReaderController {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setChapterIndex() {
|
void setChapterIndex() {
|
||||||
ref.watch(hiveBoxMangaInfo).put(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${getSourceName()}/${getMangaName()}-chapter_index",
|
if (!incognitoMode) {
|
||||||
mangaReaderModel.index.toString());
|
ref.watch(hiveBoxMangaInfo).put(
|
||||||
|
"${getSourceName()}/${getMangaName()}-chapter_index",
|
||||||
|
mangaReaderModel.index.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int getPageIndex() {
|
int getPageIndex() {
|
||||||
return ref.watch(hiveBoxMangaInfo).get(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index",
|
if (!incognitoMode) {
|
||||||
defaultValue: 0);
|
return ref.watch(hiveBoxMangaInfo).get(
|
||||||
|
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index",
|
||||||
|
defaultValue: 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getPageLength() {
|
int getPageLength(List incognitoPageLength) {
|
||||||
final page = ref.watch(hiveBoxMangaInfo).get(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-pageurl",
|
if (!incognitoMode) {
|
||||||
) as List;
|
final page = ref.watch(hiveBoxMangaInfo).get(
|
||||||
return page.length;
|
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-pageurl",
|
||||||
|
) as List;
|
||||||
|
return page.length;
|
||||||
|
}
|
||||||
|
return incognitoPageLength.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPageIndex(int newIndex) {
|
void setPageIndex(int newIndex) {
|
||||||
ref.watch(hiveBoxMangaInfo).put(
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index",
|
if (!incognitoMode) {
|
||||||
newIndex);
|
ref.watch(hiveBoxMangaInfo).put(
|
||||||
|
"${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index",
|
||||||
|
newIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String getMangaName() {
|
String getMangaName() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:mangayomi/views/more/widgets/incognito_mode_widget.dart';
|
||||||
|
import 'package:mangayomi/views/more/widgets/list_tile_widget.dart';
|
||||||
|
|
||||||
class MoreScreen extends StatelessWidget {
|
class MoreScreen extends StatelessWidget {
|
||||||
const MoreScreen({super.key});
|
const MoreScreen({super.key});
|
||||||
|
|
@ -29,17 +31,7 @@ class MoreScreen extends StatelessWidget {
|
||||||
// onChanged: (value) {},
|
// onChanged: (value) {},
|
||||||
// ),
|
// ),
|
||||||
// ),
|
// ),
|
||||||
ListTile(
|
const IncognitoModeWidget(),
|
||||||
onTap: () {},
|
|
||||||
leading: const SizedBox(
|
|
||||||
height: 40, child: Icon(CupertinoIcons.eyeglasses)),
|
|
||||||
subtitle: const Text('pauses reading history'),
|
|
||||||
title: const Text('Incognito mode'),
|
|
||||||
trailing: Switch(
|
|
||||||
value: false,
|
|
||||||
onChanged: (value) {},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const Divider(
|
const Divider(
|
||||||
color: Colors.grey,
|
color: Colors.grey,
|
||||||
),
|
),
|
||||||
|
|
@ -77,25 +69,22 @@ class MoreScreen extends StatelessWidget {
|
||||||
// const Divider(
|
// const Divider(
|
||||||
// color: Colors.grey,
|
// color: Colors.grey,
|
||||||
// ),
|
// ),
|
||||||
ListTile(
|
ListTileWidget(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
context.push('/settings');
|
context.push('/settings');
|
||||||
},
|
},
|
||||||
leading: const SizedBox(
|
icon: Icons.settings_outlined,
|
||||||
height: 40, child: Icon(Icons.settings_outlined)),
|
title: 'Settings',
|
||||||
title: const Text('Settings'),
|
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTileWidget(
|
||||||
onTap: () {},
|
onTap: () {},
|
||||||
leading: const SizedBox(
|
icon: Icons.info_outline,
|
||||||
height: 40, child: Icon(Icons.info_outline)),
|
title: 'About',
|
||||||
title: const Text('About'),
|
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTileWidget(
|
||||||
onTap: () {},
|
onTap: () {},
|
||||||
leading: const SizedBox(
|
icon: Icons.help_outline,
|
||||||
height: 40, child: Icon(Icons.help_outline)),
|
title: 'Help',
|
||||||
title: const Text('Help'),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ part of 'blend_level_state_provider.dart';
|
||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$blendLevelStateHash() => r'11d6ef7888230e249039d24cea788b3a9b4fb6e2';
|
String _$blendLevelStateHash() => r'20a7e4e5cb5ff9d60bcf60c2c7e9b36584c3acb0';
|
||||||
|
|
||||||
/// See also [BlendLevelState].
|
/// See also [BlendLevelState].
|
||||||
@ProviderFor(BlendLevelState)
|
@ProviderFor(BlendLevelState)
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,14 @@ class _ThemeSelectorState extends ConsumerState<ThemeSelector> {
|
||||||
optionButtonPadding: EdgeInsets.zero,
|
optionButtonPadding: EdgeInsets.zero,
|
||||||
optionButtonMargin: EdgeInsets.zero,
|
optionButtonMargin: EdgeInsets.zero,
|
||||||
),
|
),
|
||||||
Text(ThemeAA.schemes[index].name)
|
const SizedBox(
|
||||||
|
height: 3,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
ThemeAA.schemes[index].name,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 12, fontWeight: FontWeight.w300),
|
||||||
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (selected == index)
|
if (selected == index)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import 'package:mangayomi/providers/hive_provider.dart';
|
||||||
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
part 'incognito_mode_state_provider.g.dart';
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
class IncognitoModeState extends _$IncognitoModeState {
|
||||||
|
@override
|
||||||
|
bool build() {
|
||||||
|
return ref
|
||||||
|
.watch(hiveBoxSettings)
|
||||||
|
.get('incognitoMode', defaultValue: false)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setIncognitoMode(bool value) {
|
||||||
|
state = value;
|
||||||
|
ref.watch(hiveBoxSettings).put('incognitoMode', state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'incognito_mode_state_provider.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// RiverpodGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
String _$incognitoModeStateHash() =>
|
||||||
|
r'614663075117c18594fda5884b79451ec77c3f1f';
|
||||||
|
|
||||||
|
/// See also [IncognitoModeState].
|
||||||
|
@ProviderFor(IncognitoModeState)
|
||||||
|
final incognitoModeStateProvider =
|
||||||
|
AutoDisposeNotifierProvider<IncognitoModeState, bool>.internal(
|
||||||
|
IncognitoModeState.new,
|
||||||
|
name: r'incognitoModeStateProvider',
|
||||||
|
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||||
|
? null
|
||||||
|
: _$incognitoModeStateHash,
|
||||||
|
dependencies: null,
|
||||||
|
allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef _$IncognitoModeState = AutoDisposeNotifier<bool>;
|
||||||
|
// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/src/widgets/framework.dart';
|
|
||||||
import 'package:flutter/src/widgets/placeholder.dart';
|
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:mangayomi/views/more/widgets/list_tile_widget.dart';
|
||||||
|
|
||||||
class SettingsScreen extends StatelessWidget {
|
class SettingsScreen extends StatelessWidget {
|
||||||
const SettingsScreen({super.key});
|
const SettingsScreen({super.key});
|
||||||
|
|
@ -10,14 +9,14 @@ class SettingsScreen extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text("Settings"),
|
title: const Text("Settings"),
|
||||||
actions: [],
|
actions: [],
|
||||||
),
|
),
|
||||||
body: Column(
|
body: Column(
|
||||||
children: [
|
children: [
|
||||||
ListTile(
|
ListTileWidget(
|
||||||
title: Text("Appearance"),
|
title: 'Appearance',
|
||||||
leading: const Icon(Icons.color_lens_rounded),
|
icon: Icons.color_lens_rounded,
|
||||||
onTap: () => context.push('/appearance')),
|
onTap: () => context.push('/appearance')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
32
lib/views/more/widgets/incognito_mode_widget.dart
Normal file
32
lib/views/more/widgets/incognito_mode_widget.dart
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:mangayomi/views/more/settings/providers/incognito_mode_state_provider.dart';
|
||||||
|
import 'package:mangayomi/views/more/widgets/list_tile_widget.dart';
|
||||||
|
|
||||||
|
class IncognitoModeWidget extends ConsumerWidget {
|
||||||
|
const IncognitoModeWidget({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final incognitoMode = ref.watch(incognitoModeStateProvider);
|
||||||
|
return ListTileWidget(
|
||||||
|
onTap: () {
|
||||||
|
if (incognitoMode == true) {
|
||||||
|
ref.read(incognitoModeStateProvider.notifier).setIncognitoMode(false);
|
||||||
|
} else {
|
||||||
|
ref.read(incognitoModeStateProvider.notifier).setIncognitoMode(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
icon: CupertinoIcons.eyeglasses,
|
||||||
|
subtitle: 'pauses reading history',
|
||||||
|
title: 'Incognito mode',
|
||||||
|
trailing: Switch(
|
||||||
|
value: incognitoMode,
|
||||||
|
onChanged: (value) {
|
||||||
|
ref.read(incognitoModeStateProvider.notifier).setIncognitoMode(value);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
33
lib/views/more/widgets/list_tile_widget.dart
Normal file
33
lib/views/more/widgets/list_tile_widget.dart
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mangayomi/utils/colors.dart';
|
||||||
|
|
||||||
|
class ListTileWidget extends StatelessWidget {
|
||||||
|
final VoidCallback onTap;
|
||||||
|
final String title;
|
||||||
|
final IconData icon;
|
||||||
|
final String? subtitle;
|
||||||
|
final Widget? trailing;
|
||||||
|
const ListTileWidget(
|
||||||
|
{super.key,
|
||||||
|
required this.onTap,
|
||||||
|
required this.title,
|
||||||
|
required this.icon,
|
||||||
|
this.subtitle,
|
||||||
|
this.trailing});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ListTile(
|
||||||
|
onTap: onTap,
|
||||||
|
subtitle: subtitle != null ? Text(subtitle!) : null,
|
||||||
|
leading: SizedBox(
|
||||||
|
height: 40,
|
||||||
|
child: Icon(
|
||||||
|
icon,
|
||||||
|
color: generalColor(context),
|
||||||
|
)),
|
||||||
|
title: Text(title),
|
||||||
|
trailing: trailing,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue