From 82e48642adbe62a2bef81478a029bf8b691242c3 Mon Sep 17 00:00:00 2001 From: kodjodevf <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 27 Apr 2023 15:58:10 +0100 Subject: [PATCH] library filter features --- lib/services/get_manga_chapter_url.g.dart | 2 +- lib/views/library/library_screen.dart | 130 +++-- .../providers/library_state_provider.dart | 372 +++++++++++++ .../providers/library_state_provider.g.dart | 515 ++++++++++++++++++ lib/views/manga/detail/manga_detail_view.dart | 95 ++-- .../detail/providers/state_providers.dart | 292 +++------- .../detail/providers/state_providers.g.dart | 65 +-- .../chapter_filter_list_tile_widget.dart | 32 +- lib/views/manga/reader/manga_reader_view.dart | 2 + .../reader_controller_provider.g.dart | 2 +- 10 files changed, 1122 insertions(+), 385 deletions(-) diff --git a/lib/services/get_manga_chapter_url.g.dart b/lib/services/get_manga_chapter_url.g.dart index 82153628..dead5273 100644 --- a/lib/services/get_manga_chapter_url.g.dart +++ b/lib/services/get_manga_chapter_url.g.dart @@ -7,7 +7,7 @@ part of 'get_manga_chapter_url.dart'; // ************************************************************************** String _$getMangaChapterUrlHash() => - r'128242519581990fb05796608bc1e746d0e885df'; + r'7645294b8966c7069d9c2e4528e1fee512bb1694'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/views/library/library_screen.dart b/lib/views/library/library_screen.dart index ecbcad75..679d9545 100644 --- a/lib/views/library/library_screen.dart +++ b/lib/views/library/library_screen.dart @@ -9,6 +9,7 @@ import 'package:mangayomi/views/library/providers/library_state_provider.dart'; import 'package:mangayomi/views/library/search_text_form_field.dart'; import 'package:mangayomi/views/library/widgets/library_gridview_widget.dart'; import 'package:mangayomi/views/library/widgets/library_listview_widget.dart'; +import 'package:mangayomi/views/manga/detail/widgets/chapter_filter_list_tile_widget.dart'; class LibraryScreen extends ConsumerStatefulWidget { const LibraryScreen({super.key}); @@ -24,41 +25,15 @@ class _LibraryScreenState extends ConsumerState List entriesFilter = []; final _textEditingController = TextEditingController(); - List bookmark() { - List mang = []; - for (var entry in entries) { - final d = - entry.chapters!.where((element) => element.isBookmarked == true); - List chap = []; - for (var a in d) { - chap.add(a); - } - mang.add(ModelManga( - source: entry.source, - author: entry.author, - favorite: entry.favorite, - genre: entry.genre, - imageUrl: entry.imageUrl, - lang: entry.lang, - link: entry.link, - name: entry.name, - status: entry.status, - description: entry.description, - dateAdded: entry.dateAdded, - lastUpdate: entry.lastUpdate, - category: entry.category, - lastRead: entry.lastRead, - chapters: chap)); - } - return mang; - } - @override Widget build(BuildContext context) { final reverse = ref.watch(libraryReverseListStateProvider); final displayType = ref .read(libraryDisplayTypeStateProvider.notifier) .getLibraryDisplayTypeValue(ref.watch(libraryDisplayTypeStateProvider)); + final isNotFiltering = ref + .read(mangaFilterResultStateProvider(mangaList: entries).notifier) + .isNotFiltering(); return Scaffold( appBar: AppBar( elevation: 0, @@ -73,12 +48,7 @@ class _LibraryScreenState extends ConsumerState isSearch ? SeachFormTextField( onChanged: (value) { - setState(() { - entriesFilter = entries - .where((element) => - element.name!.toLowerCase().contains(value)) - .toList(); - }); + setState(() {}); }, onPressed: () { setState(() { @@ -108,8 +78,9 @@ class _LibraryScreenState extends ConsumerState onPressed: () { _showDraggableMenu(); }, - icon: const Icon( + icon: Icon( Icons.filter_list_sharp, + color: isNotFiltering ? null : Colors.yellow, )), PopupMenuButton( itemBuilder: (context) { @@ -125,13 +96,19 @@ class _LibraryScreenState extends ConsumerState valueListenable: ref.watch(hiveBoxManga).listenable(), builder: (context, value, child) { entries = value.values.where((element) => element.favorite).toList(); - final entriesManga = _textEditingController.text.isNotEmpty - ? entriesFilter - : reverse - ? entries.reversed.toList() - : entries; + final data = + ref.watch(mangaFilterResultStateProvider(mangaList: entries)); + entriesFilter = _textEditingController.text.isNotEmpty + ? data + .where((element) => element.name! + .toLowerCase() + .contains(_textEditingController.text.toLowerCase())) + .toList() + : data; + final entriesManga = + reverse ? entriesFilter.reversed.toList() : entriesFilter; - if (entries.isNotEmpty || entriesFilter.isNotEmpty) { + if (entriesFilter.isNotEmpty) { return displayType == DisplayType.list ? LibraryListViewWidget( entriesManga: entriesManga, @@ -181,7 +158,74 @@ class _LibraryScreenState extends ConsumerState Flexible( child: TabBarView(controller: tabBarController, children: [ - const Center(child: Text("soon")), + Consumer(builder: (context, ref, chil) { + return Column( + children: [ + ListTileChapterFilter( + label: "Downloaded", + type: ref.watch( + mangaFilterDownloadedStateProvider( + mangaList: entries)), + onTap: () { + setState(() { + entriesFilter = ref + .read( + mangaFilterDownloadedStateProvider( + mangaList: entries) + .notifier) + .update(); + }); + }), + ListTileChapterFilter( + label: "Unread", + type: ref.watch( + mangaFilterUnreadStateProvider( + mangaList: entries)), + onTap: () { + setState(() { + entriesFilter = ref + .read( + mangaFilterUnreadStateProvider( + mangaList: entries) + .notifier) + .update(); + }); + }), + ListTileChapterFilter( + label: "Started", + type: ref.watch( + mangaFilterStartedStateProvider( + mangaList: entries)), + onTap: () { + setState(() { + entriesFilter = ref + .read( + mangaFilterStartedStateProvider( + mangaList: entries) + .notifier) + .update(); + }); + }), + ListTileChapterFilter( + label: "Bookmarked", + type: ref.watch( + mangaFilterBookmarkedStateProvider( + mangaList: entries)), + onTap: () { + setState(() { + entriesFilter = ref + .read( + mangaFilterBookmarkedStateProvider( + mangaList: entries) + .notifier) + .update(); + }); + + // _refreshData(); + }), + ], + ); + }), Consumer(builder: (context, ref, chil) { final reverse = ref.watch(libraryReverseListStateProvider); diff --git a/lib/views/library/providers/library_state_provider.dart b/lib/views/library/providers/library_state_provider.dart index fca92481..01f603a0 100644 --- a/lib/views/library/providers/library_state_provider.dart +++ b/lib/views/library/providers/library_state_provider.dart @@ -1,3 +1,4 @@ +import 'package:mangayomi/models/model_manga.dart'; import 'package:mangayomi/providers/hive_provider.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'library_state_provider.g.dart'; @@ -58,3 +59,374 @@ enum DisplayType { coverOnlyGrid, list, } + +@riverpod +class MangaFilterDownloadedState extends _$MangaFilterDownloadedState { + @override + int build({required List mangaList}) { + state = getType(); + return getType(); + } + + int getType() { + return ref + .watch(hiveBoxSettings) + .get("filterMangaDownload", defaultValue: 0); + } + + void setType(int type) { + ref.watch(hiveBoxSettings).put("filterMangaDownload", type); + state = type; + } + + List getData() { + if (getType() == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + final modelChapDownload = ref + .watch(hiveBoxMangaDownloads) + .get(chap.name, defaultValue: null); + if (modelChapDownload != null && + modelChapDownload.isDownload == true) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + + return data; + } else if (getType() == 2) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + final modelChapDownload = ref + .watch(hiveBoxMangaDownloads) + .get(chap.name, defaultValue: null); + if (modelChapDownload == null || + modelChapDownload.isDownload == false) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + return data; + } else { + return mangaList; + } + } + + List update() { + if (state == 0) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + final modelChapDownload = ref + .watch(hiveBoxMangaDownloads) + .get(chap.name, defaultValue: null); + if (modelChapDownload != null && + modelChapDownload.isDownload == true) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + setType(1); + return data; + } else if (state == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + final modelChapDownload = ref + .watch(hiveBoxMangaDownloads) + .get(chap.name, defaultValue: null); + if (modelChapDownload == null || + modelChapDownload.isDownload == false) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + setType(2); + return data; + } else { + setType(0); + return mangaList; + } + } +} + +@riverpod +class MangaFilterUnreadState extends _$MangaFilterUnreadState { + @override + int build({required List mangaList}) { + state = getType(); + return getType(); + } + + int getType() { + return ref.watch(hiveBoxSettings).get("filterMangaUnread", defaultValue: 0); + } + + void setType(int type) { + ref.watch(hiveBoxSettings).put("filterMangaUnread", type); + state = type; + } + + List getData() { + if (getType() == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (!chap.isRead) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + return data; + } else if (getType() == 2) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (chap.isRead) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + return data; + } else { + return mangaList; + } + } + + List update() { + if (state == 0) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (!chap.isRead) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + setType(1); + return data; + } else if (state == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (chap.isRead) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + setType(2); + return data; + } else { + setType(0); + return mangaList; + } + } +} + +@riverpod +class MangaFilterStartedState extends _$MangaFilterStartedState { + @override + int build({required List mangaList}) { + state = getType(); + return getType(); + } + + int getType() { + return ref.watch(hiveBoxSettings).get("filterMangaStated", defaultValue: 0); + } + + void setType(int type) { + ref.watch(hiveBoxSettings).put("filterMangaStated", type); + state = type; + } + + List getData() { + if (getType() == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (!chap.isRead) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + return data; + } else if (getType() == 2) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (chap.isRead) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + return data; + } else { + return mangaList; + } + } + + List update() { + if (state == 0) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (!chap.isRead) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + setType(1); + return data; + } else if (state == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (chap.isRead) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + setType(2); + return data; + } else { + setType(0); + return mangaList; + } + } +} + +@riverpod +class MangaFilterBookmarkedState extends _$MangaFilterBookmarkedState { + @override + int build({required List mangaList}) { + state = getType(); + return getType(); + } + + int getType() { + return ref + .watch(hiveBoxSettings) + .get("filterMangaBookMarked", defaultValue: 0); + } + + void setType(int type) { + ref.watch(hiveBoxSettings).put("filterMangaBookMarked", type); + state = type; + } + + List getData() { + if (getType() == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (chap.isBookmarked) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + return data; + } else if (getType() == 2) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (!chap.isBookmarked) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + return data; + } else { + return mangaList; + } + } + + List update() { + if (state == 0) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (chap.isBookmarked) { + list.add(true); + } + } + return list.isNotEmpty; + }).toList(); + setType(1); + return data; + } else if (state == 1) { + final data = mangaList.where((element) { + List list = []; + for (var chap in element.chapters!) { + if (!chap.isBookmarked) { + list.add(true); + } + } + return list.length == element.chapters!.length; + }).toList(); + setType(2); + return data; + } else { + setType(0); + return mangaList; + } + } +} + +@riverpod +class MangaFilterResultState extends _$MangaFilterResultState { + @override + List build({required List mangaList}) { + final data1 = ref + .read(mangaFilterDownloadedStateProvider(mangaList: mangaList).notifier) + .getData(); + + final data2 = ref + .read(mangaFilterUnreadStateProvider(mangaList: data1).notifier) + .getData(); + + final data3 = ref + .read(mangaFilterStartedStateProvider(mangaList: data2).notifier) + .getData(); + final data4 = ref + .read(mangaFilterBookmarkedStateProvider(mangaList: data3).notifier) + .getData(); + + return data4; + } + + bool isNotFiltering() { + final downloadFilterType = ref + .read(mangaFilterDownloadedStateProvider(mangaList: mangaList).notifier) + .getType(); + final unreadFilterType = ref + .read(mangaFilterUnreadStateProvider(mangaList: mangaList).notifier) + .getType(); + final startedFilterType = ref + .read(mangaFilterStartedStateProvider(mangaList: mangaList).notifier) + .getType(); + final bookmarkedFilterType = ref + .read(mangaFilterBookmarkedStateProvider(mangaList: mangaList).notifier) + .getType(); + return downloadFilterType == 0 && + unreadFilterType == 0 && + startedFilterType == 0 && + bookmarkedFilterType == 0; + } +} diff --git a/lib/views/library/providers/library_state_provider.g.dart b/lib/views/library/providers/library_state_provider.g.dart index b76afb2d..336a8310 100644 --- a/lib/views/library/providers/library_state_provider.g.dart +++ b/lib/views/library/providers/library_state_provider.g.dart @@ -40,4 +40,519 @@ final libraryDisplayTypeStateProvider = ); typedef _$LibraryDisplayTypeState = AutoDisposeNotifier; +String _$mangaFilterDownloadedStateHash() => + r'12b1cb7b473e6556ea9c1a2f9c7bf44017076ff4'; + +/// Copied from Dart SDK +class _SystemHash { + _SystemHash._(); + + static int combine(int hash, int value) { + // ignore: parameter_assignments + hash = 0x1fffffff & (hash + value); + // ignore: parameter_assignments + hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); + return hash ^ (hash >> 6); + } + + static int finish(int hash) { + // ignore: parameter_assignments + hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); + // ignore: parameter_assignments + hash = hash ^ (hash >> 11); + return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); + } +} + +abstract class _$MangaFilterDownloadedState + extends BuildlessAutoDisposeNotifier { + late final List mangaList; + + int build({ + required List mangaList, + }); +} + +/// See also [MangaFilterDownloadedState]. +@ProviderFor(MangaFilterDownloadedState) +const mangaFilterDownloadedStateProvider = MangaFilterDownloadedStateFamily(); + +/// See also [MangaFilterDownloadedState]. +class MangaFilterDownloadedStateFamily extends Family { + /// See also [MangaFilterDownloadedState]. + const MangaFilterDownloadedStateFamily(); + + /// See also [MangaFilterDownloadedState]. + MangaFilterDownloadedStateProvider call({ + required List mangaList, + }) { + return MangaFilterDownloadedStateProvider( + mangaList: mangaList, + ); + } + + @override + MangaFilterDownloadedStateProvider getProviderOverride( + covariant MangaFilterDownloadedStateProvider provider, + ) { + return call( + mangaList: provider.mangaList, + ); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'mangaFilterDownloadedStateProvider'; +} + +/// See also [MangaFilterDownloadedState]. +class MangaFilterDownloadedStateProvider + extends AutoDisposeNotifierProviderImpl { + /// See also [MangaFilterDownloadedState]. + MangaFilterDownloadedStateProvider({ + required this.mangaList, + }) : super.internal( + () => MangaFilterDownloadedState()..mangaList = mangaList, + from: mangaFilterDownloadedStateProvider, + name: r'mangaFilterDownloadedStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$mangaFilterDownloadedStateHash, + dependencies: MangaFilterDownloadedStateFamily._dependencies, + allTransitiveDependencies: + MangaFilterDownloadedStateFamily._allTransitiveDependencies, + ); + + final List mangaList; + + @override + bool operator ==(Object other) { + return other is MangaFilterDownloadedStateProvider && + other.mangaList == mangaList; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, mangaList.hashCode); + + return _SystemHash.finish(hash); + } + + @override + int runNotifierBuild( + covariant MangaFilterDownloadedState notifier, + ) { + return notifier.build( + mangaList: mangaList, + ); + } +} + +String _$mangaFilterUnreadStateHash() => + r'4b9172bbb95ebca0759946328b1fbdacf07392b1'; + +abstract class _$MangaFilterUnreadState + extends BuildlessAutoDisposeNotifier { + late final List mangaList; + + int build({ + required List mangaList, + }); +} + +/// See also [MangaFilterUnreadState]. +@ProviderFor(MangaFilterUnreadState) +const mangaFilterUnreadStateProvider = MangaFilterUnreadStateFamily(); + +/// See also [MangaFilterUnreadState]. +class MangaFilterUnreadStateFamily extends Family { + /// See also [MangaFilterUnreadState]. + const MangaFilterUnreadStateFamily(); + + /// See also [MangaFilterUnreadState]. + MangaFilterUnreadStateProvider call({ + required List mangaList, + }) { + return MangaFilterUnreadStateProvider( + mangaList: mangaList, + ); + } + + @override + MangaFilterUnreadStateProvider getProviderOverride( + covariant MangaFilterUnreadStateProvider provider, + ) { + return call( + mangaList: provider.mangaList, + ); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'mangaFilterUnreadStateProvider'; +} + +/// See also [MangaFilterUnreadState]. +class MangaFilterUnreadStateProvider + extends AutoDisposeNotifierProviderImpl { + /// See also [MangaFilterUnreadState]. + MangaFilterUnreadStateProvider({ + required this.mangaList, + }) : super.internal( + () => MangaFilterUnreadState()..mangaList = mangaList, + from: mangaFilterUnreadStateProvider, + name: r'mangaFilterUnreadStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$mangaFilterUnreadStateHash, + dependencies: MangaFilterUnreadStateFamily._dependencies, + allTransitiveDependencies: + MangaFilterUnreadStateFamily._allTransitiveDependencies, + ); + + final List mangaList; + + @override + bool operator ==(Object other) { + return other is MangaFilterUnreadStateProvider && + other.mangaList == mangaList; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, mangaList.hashCode); + + return _SystemHash.finish(hash); + } + + @override + int runNotifierBuild( + covariant MangaFilterUnreadState notifier, + ) { + return notifier.build( + mangaList: mangaList, + ); + } +} + +String _$mangaFilterStartedStateHash() => + r'9b3c27078f42f624e3f3fdd255573a3279a4efed'; + +abstract class _$MangaFilterStartedState + extends BuildlessAutoDisposeNotifier { + late final List mangaList; + + int build({ + required List mangaList, + }); +} + +/// See also [MangaFilterStartedState]. +@ProviderFor(MangaFilterStartedState) +const mangaFilterStartedStateProvider = MangaFilterStartedStateFamily(); + +/// See also [MangaFilterStartedState]. +class MangaFilterStartedStateFamily extends Family { + /// See also [MangaFilterStartedState]. + const MangaFilterStartedStateFamily(); + + /// See also [MangaFilterStartedState]. + MangaFilterStartedStateProvider call({ + required List mangaList, + }) { + return MangaFilterStartedStateProvider( + mangaList: mangaList, + ); + } + + @override + MangaFilterStartedStateProvider getProviderOverride( + covariant MangaFilterStartedStateProvider provider, + ) { + return call( + mangaList: provider.mangaList, + ); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'mangaFilterStartedStateProvider'; +} + +/// See also [MangaFilterStartedState]. +class MangaFilterStartedStateProvider + extends AutoDisposeNotifierProviderImpl { + /// See also [MangaFilterStartedState]. + MangaFilterStartedStateProvider({ + required this.mangaList, + }) : super.internal( + () => MangaFilterStartedState()..mangaList = mangaList, + from: mangaFilterStartedStateProvider, + name: r'mangaFilterStartedStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$mangaFilterStartedStateHash, + dependencies: MangaFilterStartedStateFamily._dependencies, + allTransitiveDependencies: + MangaFilterStartedStateFamily._allTransitiveDependencies, + ); + + final List mangaList; + + @override + bool operator ==(Object other) { + return other is MangaFilterStartedStateProvider && + other.mangaList == mangaList; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, mangaList.hashCode); + + return _SystemHash.finish(hash); + } + + @override + int runNotifierBuild( + covariant MangaFilterStartedState notifier, + ) { + return notifier.build( + mangaList: mangaList, + ); + } +} + +String _$mangaFilterBookmarkedStateHash() => + r'88b9ef0b5a65735525a0141c6e7397d9aa7e27ff'; + +abstract class _$MangaFilterBookmarkedState + extends BuildlessAutoDisposeNotifier { + late final List mangaList; + + int build({ + required List mangaList, + }); +} + +/// See also [MangaFilterBookmarkedState]. +@ProviderFor(MangaFilterBookmarkedState) +const mangaFilterBookmarkedStateProvider = MangaFilterBookmarkedStateFamily(); + +/// See also [MangaFilterBookmarkedState]. +class MangaFilterBookmarkedStateFamily extends Family { + /// See also [MangaFilterBookmarkedState]. + const MangaFilterBookmarkedStateFamily(); + + /// See also [MangaFilterBookmarkedState]. + MangaFilterBookmarkedStateProvider call({ + required List mangaList, + }) { + return MangaFilterBookmarkedStateProvider( + mangaList: mangaList, + ); + } + + @override + MangaFilterBookmarkedStateProvider getProviderOverride( + covariant MangaFilterBookmarkedStateProvider provider, + ) { + return call( + mangaList: provider.mangaList, + ); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'mangaFilterBookmarkedStateProvider'; +} + +/// See also [MangaFilterBookmarkedState]. +class MangaFilterBookmarkedStateProvider + extends AutoDisposeNotifierProviderImpl { + /// See also [MangaFilterBookmarkedState]. + MangaFilterBookmarkedStateProvider({ + required this.mangaList, + }) : super.internal( + () => MangaFilterBookmarkedState()..mangaList = mangaList, + from: mangaFilterBookmarkedStateProvider, + name: r'mangaFilterBookmarkedStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$mangaFilterBookmarkedStateHash, + dependencies: MangaFilterBookmarkedStateFamily._dependencies, + allTransitiveDependencies: + MangaFilterBookmarkedStateFamily._allTransitiveDependencies, + ); + + final List mangaList; + + @override + bool operator ==(Object other) { + return other is MangaFilterBookmarkedStateProvider && + other.mangaList == mangaList; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, mangaList.hashCode); + + return _SystemHash.finish(hash); + } + + @override + int runNotifierBuild( + covariant MangaFilterBookmarkedState notifier, + ) { + return notifier.build( + mangaList: mangaList, + ); + } +} + +String _$mangaFilterResultStateHash() => + r'de16f80b0521bd1b8ac3232f2c5f71a554dc94e4'; + +abstract class _$MangaFilterResultState + extends BuildlessAutoDisposeNotifier> { + late final List mangaList; + + List build({ + required List mangaList, + }); +} + +/// See also [MangaFilterResultState]. +@ProviderFor(MangaFilterResultState) +const mangaFilterResultStateProvider = MangaFilterResultStateFamily(); + +/// See also [MangaFilterResultState]. +class MangaFilterResultStateFamily extends Family> { + /// See also [MangaFilterResultState]. + const MangaFilterResultStateFamily(); + + /// See also [MangaFilterResultState]. + MangaFilterResultStateProvider call({ + required List mangaList, + }) { + return MangaFilterResultStateProvider( + mangaList: mangaList, + ); + } + + @override + MangaFilterResultStateProvider getProviderOverride( + covariant MangaFilterResultStateProvider provider, + ) { + return call( + mangaList: provider.mangaList, + ); + } + + static const Iterable? _dependencies = null; + + @override + Iterable? get dependencies => _dependencies; + + static const Iterable? _allTransitiveDependencies = null; + + @override + Iterable? get allTransitiveDependencies => + _allTransitiveDependencies; + + @override + String? get name => r'mangaFilterResultStateProvider'; +} + +/// See also [MangaFilterResultState]. +class MangaFilterResultStateProvider extends AutoDisposeNotifierProviderImpl< + MangaFilterResultState, List> { + /// See also [MangaFilterResultState]. + MangaFilterResultStateProvider({ + required this.mangaList, + }) : super.internal( + () => MangaFilterResultState()..mangaList = mangaList, + from: mangaFilterResultStateProvider, + name: r'mangaFilterResultStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$mangaFilterResultStateHash, + dependencies: MangaFilterResultStateFamily._dependencies, + allTransitiveDependencies: + MangaFilterResultStateFamily._allTransitiveDependencies, + ); + + final List mangaList; + + @override + bool operator ==(Object other) { + return other is MangaFilterResultStateProvider && + other.mangaList == mangaList; + } + + @override + int get hashCode { + var hash = _SystemHash.combine(0, runtimeType.hashCode); + hash = _SystemHash.combine(hash, mangaList.hashCode); + + return _SystemHash.finish(hash); + } + + @override + List runNotifierBuild( + covariant MangaFilterResultState notifier, + ) { + return notifier.build( + mangaList: mangaList, + ); + } +} // 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 diff --git a/lib/views/manga/detail/manga_detail_view.dart b/lib/views/manga/detail/manga_detail_view.dart index fffcef5c..50078c70 100644 --- a/lib/views/manga/detail/manga_detail_view.dart +++ b/lib/views/manga/detail/manga_detail_view.dart @@ -56,33 +56,27 @@ class _MangaDetailViewState extends ConsumerState ScrollController _scrollController = ScrollController(); late int _pageLength = ref - .read(chapterFilterResultStateProvider(modelManga: widget.modelManga!) - .notifier) - .getData() + .watch( + chapterFilterResultStateProvider(modelManga: widget.modelManga!)) .chapters! .length + 1; late List? _chapters = ref - .read(chapterFilterResultStateProvider(modelManga: widget.modelManga!) - .notifier) - .getData() + .watch(chapterFilterResultStateProvider(modelManga: widget.modelManga!)) .chapters; late ModelManga? _modelManga = ref - .read(chapterFilterResultStateProvider(modelManga: widget.modelManga!) - .notifier) - .getData(); + .watch(chapterFilterResultStateProvider(modelManga: widget.modelManga!)); _refreshData() { - final modelManga = ref - .read(chapterFilterResultStateProvider(modelManga: widget.modelManga!) - .notifier) - .getData(); - - setState(() { - _pageLength = modelManga.chapters!.length + 1; - _chapters = modelManga.chapters; - _modelManga = modelManga; - }); + final modelManga = ref.watch( + chapterFilterResultStateProvider(modelManga: widget.modelManga!)); + if (mounted) { + setState(() { + _pageLength = modelManga.chapters!.length + 1; + _chapters = modelManga.chapters; + _modelManga = modelManga; + }); + } } bool isRefresh = false; @@ -93,6 +87,10 @@ class _MangaDetailViewState extends ConsumerState final reverse = ref.watch(reverseMangaStateProvider(modelManga: widget.modelManga!)); final chapter = ref.watch(chapterModelStateProvider); + final isNotFiltering = ref + .read(chapterFilterResultStateProvider(modelManga: widget.modelManga!) + .notifier) + .isNotFiltering(); return NotificationListener( onNotification: (notification) { if (notification.direction == ScrollDirection.forward) { @@ -192,8 +190,9 @@ class _MangaDetailViewState extends ConsumerState onPressed: () { _showDraggableMenu(); }, - icon: const Icon( + icon: Icon( Icons.filter_list_sharp, + color: isNotFiltering ? null : Colors.yellow, )), PopupMenuButton( itemBuilder: (context) { @@ -265,11 +264,9 @@ class _MangaDetailViewState extends ConsumerState return _bodyContainer(); } if (isRefresh) { - final modelManga = ref - .read(chapterFilterResultStateProvider( - modelManga: widget.modelManga!) - .notifier) - .getData(); + final modelManga = ref.watch( + chapterFilterResultStateProvider( + modelManga: widget.modelManga!)); _pageLength = modelManga.chapters!.length + 1; _chapters = modelManga.chapters; @@ -346,22 +343,8 @@ class _MangaDetailViewState extends ConsumerState } // print(chapterNameList); - final model = ModelManga( - imageUrl: widget.modelManga!.imageUrl, - name: widget.modelManga!.name, - genre: widget.modelManga!.genre, - author: widget.modelManga!.author, - description: widget.modelManga!.description, - status: widget.modelManga!.status, - favorite: widget.modelManga!.favorite, - link: widget.modelManga!.link, - source: widget.modelManga!.source, - lang: widget.modelManga!.lang, - dateAdded: widget.modelManga!.dateAdded, - lastUpdate: widget.modelManga!.lastUpdate, - chapters: chap, - category: widget.modelManga!.category, - lastRead: widget.modelManga!.lastRead); + final model = modelMangaWithNewChapValue( + modelManga: widget.modelManga!, chapters: chap); ref.watch(hiveBoxManga).put( '${widget.modelManga!.lang}-${widget.modelManga!.link}', model); @@ -416,22 +399,8 @@ class _MangaDetailViewState extends ConsumerState entries.chapters![i].lastPageRead)); } - final model = ModelManga( - imageUrl: widget.modelManga!.imageUrl, - name: widget.modelManga!.name, - genre: widget.modelManga!.genre, - author: widget.modelManga!.author, - description: widget.modelManga!.description, - status: widget.modelManga!.status, - favorite: widget.modelManga!.favorite, - link: widget.modelManga!.link, - source: widget.modelManga!.source, - lang: widget.modelManga!.lang, - dateAdded: widget.modelManga!.dateAdded, - lastUpdate: widget.modelManga!.lastUpdate, - chapters: chap, - category: widget.modelManga!.category, - lastRead: widget.modelManga!.lastRead); + final model = modelMangaWithNewChapValue( + modelManga: widget.modelManga!, chapters: chap); ref.watch(hiveBoxManga).put( '${widget.modelManga!.lang}-${widget.modelManga!.link}', model); @@ -564,15 +533,17 @@ class _MangaDetailViewState extends ConsumerState _refreshData(); }), ListTileChapterFilter( - label: "Bookmark", + label: "Bookmarked", type: ref.watch( - chapterFilterBookmarkStateProvider( + chapterFilterBookmarkedStateProvider( modelManga: widget.modelManga!)), onTap: () { ref - .read(chapterFilterBookmarkStateProvider( - modelManga: widget.modelManga!) - .notifier) + .read( + chapterFilterBookmarkedStateProvider( + modelManga: + widget.modelManga!) + .notifier) .update(); _refreshData(); }), diff --git a/lib/views/manga/detail/providers/state_providers.dart b/lib/views/manga/detail/providers/state_providers.dart index 77fea1c0..3e1c1aff 100644 --- a/lib/views/manga/detail/providers/state_providers.dart +++ b/lib/views/manga/detail/providers/state_providers.dart @@ -95,14 +95,14 @@ class ReverseMangaState extends _$ReverseMangaState { @override bool build({required ModelManga modelManga}) { return ref.watch(hiveBoxSettings).get( - "${modelManga.source}/${modelManga.name}-reverseManga", + "${modelManga.source}/${modelManga.name}-reverseChapter", defaultValue: false); } void update(bool value) { ref .watch(hiveBoxSettings) - .put("${modelManga.source}/${modelManga.name}-reverseManga", value); + .put("${modelManga.source}/${modelManga.name}-reverseChapter", value); state = value; } } @@ -117,13 +117,13 @@ class ChapterFilterDownloadedState extends _$ChapterFilterDownloadedState { int getType() { return ref.watch(hiveBoxSettings).get( - "${modelManga.source}/${modelManga.name}-sortChapterDownload", + "${modelManga.source}/${modelManga.name}-filterChapterDownload", defaultValue: 0); } void setType(int type) { ref.watch(hiveBoxSettings).put( - "${modelManga.source}/${modelManga.name}-sortChapterDownload", type); + "${modelManga.source}/${modelManga.name}-filterChapterDownload", type); state = type; } @@ -146,22 +146,8 @@ class ChapterFilterDownloadedState extends _$ChapterFilterDownloadedState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); return model; } else if (getType() == 2) { @@ -183,22 +169,8 @@ class ChapterFilterDownloadedState extends _$ChapterFilterDownloadedState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); return model; } else { @@ -225,22 +197,8 @@ class ChapterFilterDownloadedState extends _$ChapterFilterDownloadedState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); setType(1); return model; } else if (state == 1) { @@ -262,22 +220,8 @@ class ChapterFilterDownloadedState extends _$ChapterFilterDownloadedState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); setType(2); return model; } else { @@ -297,14 +241,13 @@ class ChapterFilterUnreadState extends _$ChapterFilterUnreadState { int getType() { return ref.watch(hiveBoxSettings).get( - "${modelManga.source}/${modelManga.name}-sortChapterUnread", + "${modelManga.source}/${modelManga.name}-filterChapterUnread", defaultValue: 0); } void setType(int type) { - ref - .watch(hiveBoxSettings) - .put("${modelManga.source}/${modelManga.name}-sortChapterUnread", type); + ref.watch(hiveBoxSettings).put( + "${modelManga.source}/${modelManga.name}-filterChapterUnread", type); state = type; } @@ -324,22 +267,8 @@ class ChapterFilterUnreadState extends _$ChapterFilterUnreadState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); return model; } else if (getType() == 2) { @@ -357,22 +286,8 @@ class ChapterFilterUnreadState extends _$ChapterFilterUnreadState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); return model; } else { @@ -396,22 +311,8 @@ class ChapterFilterUnreadState extends _$ChapterFilterUnreadState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); setType(1); return model; } else if (state == 1) { @@ -429,22 +330,8 @@ class ChapterFilterUnreadState extends _$ChapterFilterUnreadState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); setType(2); return model; } else { @@ -455,7 +342,7 @@ class ChapterFilterUnreadState extends _$ChapterFilterUnreadState { } @riverpod -class ChapterFilterBookmarkState extends _$ChapterFilterBookmarkState { +class ChapterFilterBookmarkedState extends _$ChapterFilterBookmarkedState { @override int build({required ModelManga modelManga}) { state = getType(); @@ -464,13 +351,13 @@ class ChapterFilterBookmarkState extends _$ChapterFilterBookmarkState { int getType() { return ref.watch(hiveBoxSettings).get( - "${modelManga.source}/${modelManga.name}-sortChapterBookMark", + "${modelManga.source}/${modelManga.name}-filterChapterBookMark", defaultValue: 0); } void setType(int type) { ref.watch(hiveBoxSettings).put( - "${modelManga.source}/${modelManga.name}-sortChapterBookMark", type); + "${modelManga.source}/${modelManga.name}-filterChapterBookMark", type); state = type; } @@ -490,22 +377,8 @@ class ChapterFilterBookmarkState extends _$ChapterFilterBookmarkState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); return model; } else if (getType() == 2) { @@ -523,22 +396,8 @@ class ChapterFilterBookmarkState extends _$ChapterFilterBookmarkState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); return model; } else { @@ -562,22 +421,8 @@ class ChapterFilterBookmarkState extends _$ChapterFilterBookmarkState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); setType(1); return model; } else if (state == 1) { @@ -595,22 +440,8 @@ class ChapterFilterBookmarkState extends _$ChapterFilterBookmarkState { lastPageRead: chapters[i].lastPageRead)); } } - final model = ModelManga( - imageUrl: modelManga.imageUrl, - name: modelManga.name, - genre: modelManga.genre, - author: modelManga.author, - description: modelManga.description, - status: modelManga.status, - favorite: modelManga.favorite, - link: modelManga.link, - source: modelManga.source, - lang: modelManga.lang, - dateAdded: modelManga.dateAdded, - lastUpdate: modelManga.lastUpdate, - chapters: chap, - category: modelManga.category, - lastRead: modelManga.lastRead); + final model = + modelMangaWithNewChapValue(modelManga: modelManga, chapters: chap); setType(2); return model; } else { @@ -625,8 +456,8 @@ class ChapterFilterResultState extends _$ChapterFilterResultState { @override ModelManga build({required ModelManga modelManga}) { final data1 = ref - .read( - chapterFilterDownloadedStateProvider(modelManga: modelManga).notifier) + .read(chapterFilterDownloadedStateProvider(modelManga: modelManga) + .notifier) .getData(); final data2 = ref @@ -634,26 +465,47 @@ class ChapterFilterResultState extends _$ChapterFilterResultState { .getData(); final data3 = ref - .read(chapterFilterBookmarkStateProvider(modelManga: data2).notifier) + .read(chapterFilterBookmarkedStateProvider(modelManga: data2).notifier) .getData(); return data3; } - ModelManga getData() { - final data1 = ref - .read( - chapterFilterDownloadedStateProvider(modelManga: modelManga).notifier) - .getData(); + bool isNotFiltering() { + final downloadFilterType = ref + .read(chapterFilterDownloadedStateProvider(modelManga: modelManga) + .notifier) + .getType(); + final unreadFilterType = ref + .read(chapterFilterUnreadStateProvider(modelManga: modelManga).notifier) + .getType(); - final data2 = ref - .read(chapterFilterUnreadStateProvider(modelManga: data1).notifier) - .getData(); - - final data3 = ref - .read(chapterFilterBookmarkStateProvider(modelManga: data2).notifier) - .getData(); - - return data3; + final bookmarkedFilterType = ref + .read(chapterFilterBookmarkedStateProvider(modelManga: modelManga) + .notifier) + .getType(); + return downloadFilterType == 0 && + unreadFilterType == 0 && + bookmarkedFilterType == 0; } } + +ModelManga modelMangaWithNewChapValue( + {required ModelManga modelManga, required List? chapters}) { + return ModelManga( + imageUrl: modelManga.imageUrl, + name: modelManga.name, + genre: modelManga.genre, + author: modelManga.author, + description: modelManga.description, + status: modelManga.status, + favorite: modelManga.favorite, + link: modelManga.link, + source: modelManga.source, + lang: modelManga.lang, + dateAdded: modelManga.dateAdded, + lastUpdate: modelManga.lastUpdate, + chapters: chapters, + category: modelManga.category, + lastRead: modelManga.lastRead); +} diff --git a/lib/views/manga/detail/providers/state_providers.g.dart b/lib/views/manga/detail/providers/state_providers.g.dart index 26d0f1e9..318239d9 100644 --- a/lib/views/manga/detail/providers/state_providers.g.dart +++ b/lib/views/manga/detail/providers/state_providers.g.dart @@ -190,7 +190,7 @@ class ReverseMangaStateProvider } String _$chapterFilterDownloadedStateHash() => - r'9c0937b3deaa6982ec7a8c9ab5d55a99a059cd80'; + r'46dca943e064d5f70968c711812091783e0a4039'; abstract class _$ChapterFilterDownloadedState extends BuildlessAutoDisposeNotifier { @@ -290,7 +290,7 @@ class ChapterFilterDownloadedStateProvider } String _$chapterFilterUnreadStateHash() => - r'98e86b05fdcb874b551329ffdf322681f46fb6ce'; + r'48076800725c22f04493653deec4e946cb71d195'; abstract class _$ChapterFilterUnreadState extends BuildlessAutoDisposeNotifier { @@ -388,10 +388,10 @@ class ChapterFilterUnreadStateProvider } } -String _$chapterFilterBookmarkStateHash() => - r'6fb5d0d506bc209bb6d6fea8e665f511b8ef0e8f'; +String _$chapterFilterBookmarkedStateHash() => + r'4772ce2506d0c939b549c8661cd3b62cae853e20'; -abstract class _$ChapterFilterBookmarkState +abstract class _$ChapterFilterBookmarkedState extends BuildlessAutoDisposeNotifier { late final ModelManga modelManga; @@ -400,27 +400,28 @@ abstract class _$ChapterFilterBookmarkState }); } -/// See also [ChapterFilterBookmarkState]. -@ProviderFor(ChapterFilterBookmarkState) -const chapterFilterBookmarkStateProvider = ChapterFilterBookmarkStateFamily(); +/// See also [ChapterFilterBookmarkedState]. +@ProviderFor(ChapterFilterBookmarkedState) +const chapterFilterBookmarkedStateProvider = + ChapterFilterBookmarkedStateFamily(); -/// See also [ChapterFilterBookmarkState]. -class ChapterFilterBookmarkStateFamily extends Family { - /// See also [ChapterFilterBookmarkState]. - const ChapterFilterBookmarkStateFamily(); +/// See also [ChapterFilterBookmarkedState]. +class ChapterFilterBookmarkedStateFamily extends Family { + /// See also [ChapterFilterBookmarkedState]. + const ChapterFilterBookmarkedStateFamily(); - /// See also [ChapterFilterBookmarkState]. - ChapterFilterBookmarkStateProvider call({ + /// See also [ChapterFilterBookmarkedState]. + ChapterFilterBookmarkedStateProvider call({ required ModelManga modelManga, }) { - return ChapterFilterBookmarkStateProvider( + return ChapterFilterBookmarkedStateProvider( modelManga: modelManga, ); } @override - ChapterFilterBookmarkStateProvider getProviderOverride( - covariant ChapterFilterBookmarkStateProvider provider, + ChapterFilterBookmarkedStateProvider getProviderOverride( + covariant ChapterFilterBookmarkedStateProvider provider, ) { return call( modelManga: provider.modelManga, @@ -439,33 +440,33 @@ class ChapterFilterBookmarkStateFamily extends Family { _allTransitiveDependencies; @override - String? get name => r'chapterFilterBookmarkStateProvider'; + String? get name => r'chapterFilterBookmarkedStateProvider'; } -/// See also [ChapterFilterBookmarkState]. -class ChapterFilterBookmarkStateProvider - extends AutoDisposeNotifierProviderImpl { - /// See also [ChapterFilterBookmarkState]. - ChapterFilterBookmarkStateProvider({ +/// See also [ChapterFilterBookmarkedState]. +class ChapterFilterBookmarkedStateProvider + extends AutoDisposeNotifierProviderImpl { + /// See also [ChapterFilterBookmarkedState]. + ChapterFilterBookmarkedStateProvider({ required this.modelManga, }) : super.internal( - () => ChapterFilterBookmarkState()..modelManga = modelManga, - from: chapterFilterBookmarkStateProvider, - name: r'chapterFilterBookmarkStateProvider', + () => ChapterFilterBookmarkedState()..modelManga = modelManga, + from: chapterFilterBookmarkedStateProvider, + name: r'chapterFilterBookmarkedStateProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') ? null - : _$chapterFilterBookmarkStateHash, - dependencies: ChapterFilterBookmarkStateFamily._dependencies, + : _$chapterFilterBookmarkedStateHash, + dependencies: ChapterFilterBookmarkedStateFamily._dependencies, allTransitiveDependencies: - ChapterFilterBookmarkStateFamily._allTransitiveDependencies, + ChapterFilterBookmarkedStateFamily._allTransitiveDependencies, ); final ModelManga modelManga; @override bool operator ==(Object other) { - return other is ChapterFilterBookmarkStateProvider && + return other is ChapterFilterBookmarkedStateProvider && other.modelManga == modelManga; } @@ -479,7 +480,7 @@ class ChapterFilterBookmarkStateProvider @override int runNotifierBuild( - covariant ChapterFilterBookmarkState notifier, + covariant ChapterFilterBookmarkedState notifier, ) { return notifier.build( modelManga: modelManga, @@ -488,7 +489,7 @@ class ChapterFilterBookmarkStateProvider } String _$chapterFilterResultStateHash() => - r'ddb83c55bbbbd00178f582875a9b72fcec0eae5a'; + r'4701e32ae755fc2c60ef7fe6c64e3073f6329a06'; abstract class _$ChapterFilterResultState extends BuildlessAutoDisposeNotifier { diff --git a/lib/views/manga/detail/widgets/chapter_filter_list_tile_widget.dart b/lib/views/manga/detail/widgets/chapter_filter_list_tile_widget.dart index ab0d3027..f22afbb6 100644 --- a/lib/views/manga/detail/widgets/chapter_filter_list_tile_widget.dart +++ b/lib/views/manga/detail/widgets/chapter_filter_list_tile_widget.dart @@ -19,32 +19,12 @@ class ListTileChapterFilter extends StatelessWidget { ? const SizedBox( height: 20, width: 20, child: Icon(Icons.check_box_outline_blank)) : type == 1 - ? const SizedBox(height: 20, width: 20, child: Icon(Icons.check_box)) - : Stack( - children: [ - const SizedBox( - height: 20, - width: 20, - child: Icon(Icons.check_box_outline_blank)), - Positioned( - top: 3, - left: 2, - right: 0, - child: Container( - decoration: BoxDecoration( - color: Theme.of(context).primaryColor, - borderRadius: BorderRadius.circular(2)), - height: 18, - width: 17, - child: const Icon( - Icons.clear, - color: Colors.black, - size: 18, - ), - ), - ) - ], - ), + ? const SizedBox( + height: 20, width: 20, child: Icon(Icons.check_box)) + : const SizedBox( + height: 20, + width: 20, + child: Icon(Icons.indeterminate_check_box_rounded)), title: Text( label, style: const TextStyle(fontSize: 14), diff --git a/lib/views/manga/reader/manga_reader_view.dart b/lib/views/manga/reader/manga_reader_view.dart index 6805af9d..1c4cca51 100644 --- a/lib/views/manga/reader/manga_reader_view.dart +++ b/lib/views/manga/reader/manga_reader_view.dart @@ -625,6 +625,7 @@ class _MangaChapterPageGalleryState widget.readerController .getReaderModeValue(readerMode), style: const TextStyle( + color: Colors.white, fontSize: 12, ), ), @@ -670,6 +671,7 @@ class _MangaChapterPageGalleryState child: Text( '${_currentIndex + 1} / ${widget.readerController.getPageLength(widget.url)}', style: const TextStyle( + color: Colors.white, fontSize: 12.0, shadows: [ Shadow(offset: Offset(0.0, 0.0), blurRadius: 10.0) diff --git a/lib/views/manga/reader/providers/reader_controller_provider.g.dart b/lib/views/manga/reader/providers/reader_controller_provider.g.dart index 910536aa..bf1348e2 100644 --- a/lib/views/manga/reader/providers/reader_controller_provider.g.dart +++ b/lib/views/manga/reader/providers/reader_controller_provider.g.dart @@ -182,7 +182,7 @@ class CurrentIndexProvider } } -String _$readerControllerHash() => r'2528e56dfbf71a996ceeada7075eff571b621080'; +String _$readerControllerHash() => r'56c832982f94aab78b30439b025177b7f3851cec'; abstract class _$ReaderController extends BuildlessAutoDisposeNotifier { late final MangaReaderModel mangaReaderModel;