library filter features

This commit is contained in:
kodjodevf 2023-04-27 15:58:10 +01:00
parent ed367c6786
commit 82e48642ad
10 changed files with 1122 additions and 385 deletions

View file

@ -7,7 +7,7 @@ part of 'get_manga_chapter_url.dart';
// **************************************************************************
String _$getMangaChapterUrlHash() =>
r'128242519581990fb05796608bc1e746d0e885df';
r'7645294b8966c7069d9c2e4528e1fee512bb1694';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -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<LibraryScreen>
List<ModelManga> entriesFilter = [];
final _textEditingController = TextEditingController();
List<ModelManga> bookmark() {
List<ModelManga> mang = [];
for (var entry in entries) {
final d =
entry.chapters!.where((element) => element.isBookmarked == true);
List<ModelChapters> 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<LibraryScreen>
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<LibraryScreen>
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<LibraryScreen>
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<LibraryScreen>
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);

View file

@ -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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> 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<ModelManga> build({required List<ModelManga> 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;
}
}

View file

@ -40,4 +40,519 @@ final libraryDisplayTypeStateProvider =
);
typedef _$LibraryDisplayTypeState = AutoDisposeNotifier<String>;
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<int> {
late final List<ModelManga> mangaList;
int build({
required List<ModelManga> mangaList,
});
}
/// See also [MangaFilterDownloadedState].
@ProviderFor(MangaFilterDownloadedState)
const mangaFilterDownloadedStateProvider = MangaFilterDownloadedStateFamily();
/// See also [MangaFilterDownloadedState].
class MangaFilterDownloadedStateFamily extends Family<int> {
/// See also [MangaFilterDownloadedState].
const MangaFilterDownloadedStateFamily();
/// See also [MangaFilterDownloadedState].
MangaFilterDownloadedStateProvider call({
required List<ModelManga> mangaList,
}) {
return MangaFilterDownloadedStateProvider(
mangaList: mangaList,
);
}
@override
MangaFilterDownloadedStateProvider getProviderOverride(
covariant MangaFilterDownloadedStateProvider provider,
) {
return call(
mangaList: provider.mangaList,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'mangaFilterDownloadedStateProvider';
}
/// See also [MangaFilterDownloadedState].
class MangaFilterDownloadedStateProvider
extends AutoDisposeNotifierProviderImpl<MangaFilterDownloadedState, int> {
/// 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<ModelManga> 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<int> {
late final List<ModelManga> mangaList;
int build({
required List<ModelManga> mangaList,
});
}
/// See also [MangaFilterUnreadState].
@ProviderFor(MangaFilterUnreadState)
const mangaFilterUnreadStateProvider = MangaFilterUnreadStateFamily();
/// See also [MangaFilterUnreadState].
class MangaFilterUnreadStateFamily extends Family<int> {
/// See also [MangaFilterUnreadState].
const MangaFilterUnreadStateFamily();
/// See also [MangaFilterUnreadState].
MangaFilterUnreadStateProvider call({
required List<ModelManga> mangaList,
}) {
return MangaFilterUnreadStateProvider(
mangaList: mangaList,
);
}
@override
MangaFilterUnreadStateProvider getProviderOverride(
covariant MangaFilterUnreadStateProvider provider,
) {
return call(
mangaList: provider.mangaList,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'mangaFilterUnreadStateProvider';
}
/// See also [MangaFilterUnreadState].
class MangaFilterUnreadStateProvider
extends AutoDisposeNotifierProviderImpl<MangaFilterUnreadState, int> {
/// 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<ModelManga> 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<int> {
late final List<ModelManga> mangaList;
int build({
required List<ModelManga> mangaList,
});
}
/// See also [MangaFilterStartedState].
@ProviderFor(MangaFilterStartedState)
const mangaFilterStartedStateProvider = MangaFilterStartedStateFamily();
/// See also [MangaFilterStartedState].
class MangaFilterStartedStateFamily extends Family<int> {
/// See also [MangaFilterStartedState].
const MangaFilterStartedStateFamily();
/// See also [MangaFilterStartedState].
MangaFilterStartedStateProvider call({
required List<ModelManga> mangaList,
}) {
return MangaFilterStartedStateProvider(
mangaList: mangaList,
);
}
@override
MangaFilterStartedStateProvider getProviderOverride(
covariant MangaFilterStartedStateProvider provider,
) {
return call(
mangaList: provider.mangaList,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'mangaFilterStartedStateProvider';
}
/// See also [MangaFilterStartedState].
class MangaFilterStartedStateProvider
extends AutoDisposeNotifierProviderImpl<MangaFilterStartedState, int> {
/// 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<ModelManga> 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<int> {
late final List<ModelManga> mangaList;
int build({
required List<ModelManga> mangaList,
});
}
/// See also [MangaFilterBookmarkedState].
@ProviderFor(MangaFilterBookmarkedState)
const mangaFilterBookmarkedStateProvider = MangaFilterBookmarkedStateFamily();
/// See also [MangaFilterBookmarkedState].
class MangaFilterBookmarkedStateFamily extends Family<int> {
/// See also [MangaFilterBookmarkedState].
const MangaFilterBookmarkedStateFamily();
/// See also [MangaFilterBookmarkedState].
MangaFilterBookmarkedStateProvider call({
required List<ModelManga> mangaList,
}) {
return MangaFilterBookmarkedStateProvider(
mangaList: mangaList,
);
}
@override
MangaFilterBookmarkedStateProvider getProviderOverride(
covariant MangaFilterBookmarkedStateProvider provider,
) {
return call(
mangaList: provider.mangaList,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'mangaFilterBookmarkedStateProvider';
}
/// See also [MangaFilterBookmarkedState].
class MangaFilterBookmarkedStateProvider
extends AutoDisposeNotifierProviderImpl<MangaFilterBookmarkedState, int> {
/// 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<ModelManga> 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<List<ModelManga>> {
late final List<ModelManga> mangaList;
List<ModelManga> build({
required List<ModelManga> mangaList,
});
}
/// See also [MangaFilterResultState].
@ProviderFor(MangaFilterResultState)
const mangaFilterResultStateProvider = MangaFilterResultStateFamily();
/// See also [MangaFilterResultState].
class MangaFilterResultStateFamily extends Family<List<ModelManga>> {
/// See also [MangaFilterResultState].
const MangaFilterResultStateFamily();
/// See also [MangaFilterResultState].
MangaFilterResultStateProvider call({
required List<ModelManga> mangaList,
}) {
return MangaFilterResultStateProvider(
mangaList: mangaList,
);
}
@override
MangaFilterResultStateProvider getProviderOverride(
covariant MangaFilterResultStateProvider provider,
) {
return call(
mangaList: provider.mangaList,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'mangaFilterResultStateProvider';
}
/// See also [MangaFilterResultState].
class MangaFilterResultStateProvider extends AutoDisposeNotifierProviderImpl<
MangaFilterResultState, List<ModelManga>> {
/// 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<ModelManga> 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<ModelManga> 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

View file

@ -56,33 +56,27 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
ScrollController _scrollController = ScrollController();
late int _pageLength = ref
.read(chapterFilterResultStateProvider(modelManga: widget.modelManga!)
.notifier)
.getData()
.watch(
chapterFilterResultStateProvider(modelManga: widget.modelManga!))
.chapters!
.length +
1;
late List<ModelChapters>? _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<MangaDetailView>
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<UserScrollNotification>(
onNotification: (notification) {
if (notification.direction == ScrollDirection.forward) {
@ -192,8 +190,9 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
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<MangaDetailView>
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<MangaDetailView>
}
// 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<MangaDetailView>
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<MangaDetailView>
_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();
}),

View file

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

View file

@ -190,7 +190,7 @@ class ReverseMangaStateProvider
}
String _$chapterFilterDownloadedStateHash() =>
r'9c0937b3deaa6982ec7a8c9ab5d55a99a059cd80';
r'46dca943e064d5f70968c711812091783e0a4039';
abstract class _$ChapterFilterDownloadedState
extends BuildlessAutoDisposeNotifier<int> {
@ -290,7 +290,7 @@ class ChapterFilterDownloadedStateProvider
}
String _$chapterFilterUnreadStateHash() =>
r'98e86b05fdcb874b551329ffdf322681f46fb6ce';
r'48076800725c22f04493653deec4e946cb71d195';
abstract class _$ChapterFilterUnreadState
extends BuildlessAutoDisposeNotifier<int> {
@ -388,10 +388,10 @@ class ChapterFilterUnreadStateProvider
}
}
String _$chapterFilterBookmarkStateHash() =>
r'6fb5d0d506bc209bb6d6fea8e665f511b8ef0e8f';
String _$chapterFilterBookmarkedStateHash() =>
r'4772ce2506d0c939b549c8661cd3b62cae853e20';
abstract class _$ChapterFilterBookmarkState
abstract class _$ChapterFilterBookmarkedState
extends BuildlessAutoDisposeNotifier<int> {
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<int> {
/// See also [ChapterFilterBookmarkState].
const ChapterFilterBookmarkStateFamily();
/// See also [ChapterFilterBookmarkedState].
class ChapterFilterBookmarkedStateFamily extends Family<int> {
/// 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<int> {
_allTransitiveDependencies;
@override
String? get name => r'chapterFilterBookmarkStateProvider';
String? get name => r'chapterFilterBookmarkedStateProvider';
}
/// See also [ChapterFilterBookmarkState].
class ChapterFilterBookmarkStateProvider
extends AutoDisposeNotifierProviderImpl<ChapterFilterBookmarkState, int> {
/// See also [ChapterFilterBookmarkState].
ChapterFilterBookmarkStateProvider({
/// See also [ChapterFilterBookmarkedState].
class ChapterFilterBookmarkedStateProvider
extends AutoDisposeNotifierProviderImpl<ChapterFilterBookmarkedState, int> {
/// 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<ModelManga> {

View file

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

View file

@ -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>[
Shadow(offset: Offset(0.0, 0.0), blurRadius: 10.0)

View file

@ -182,7 +182,7 @@ class CurrentIndexProvider
}
}
String _$readerControllerHash() => r'2528e56dfbf71a996ceeada7075eff571b621080';
String _$readerControllerHash() => r'56c832982f94aab78b30439b025177b7f3851cec';
abstract class _$ReaderController extends BuildlessAutoDisposeNotifier<void> {
late final MangaReaderModel mangaReaderModel;