add incognito mode & global color for ListTile icon

This commit is contained in:
kodjodevf 2023-04-11 12:53:26 +01:00
parent edf9958b8f
commit e71a28f21e
18 changed files with 268 additions and 103 deletions

View file

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

View file

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

View file

@ -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
View file

@ -0,0 +1,5 @@
import 'package:flutter/material.dart';
generalColor(BuildContext context) {
return Theme.of(context).toggleButtonsTheme.color;
}

View file

@ -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]

View file

@ -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,

View file

@ -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",

View file

@ -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(),

View file

@ -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() {

View file

@ -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'),
), ),
], ],
), ),

View file

@ -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)

View file

@ -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)

View file

@ -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);
}
}

View file

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

View file

@ -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')),
], ],
), ),

View 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);
},
),
);
}
}

View 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,
);
}
}