updates screen search query

This commit is contained in:
Schnitzel5 2025-04-14 00:00:41 +02:00
parent 90dadbd2c6
commit 50fe6abfac
7 changed files with 48 additions and 26 deletions

View file

@ -238,7 +238,10 @@ class _HistoryTabState extends ConsumerState<HistoryTab> {
Widget build(BuildContext context) {
final l10n = l10nLocalizations(context)!;
final history = ref.watch(
getAllHistoryStreamProvider(itemType: widget.itemType, search: widget.query),
getAllHistoryStreamProvider(
itemType: widget.itemType,
search: widget.query,
),
);
return Scaffold(
body: history.when(
@ -425,7 +428,7 @@ class _HistoryTabState extends ConsumerState<HistoryTab> {
Widget getCoverImage(Manga manga) {
return manga.customCoverImage != null
? Image.memory(manga.customCoverImage as Uint8List,)
? Image.memory(manga.customCoverImage as Uint8List)
: cachedCompressedNetworkImage(
headers: ref.watch(
headersProvider(source: manga.source!, lang: manga.lang!),

View file

@ -12,7 +12,7 @@ part 'isar_providers.g.dart';
Stream<List<History>> getAllHistoryStream(
Ref ref, {
required ItemType itemType,
required String search,
String search = "",
}) async* {
yield* isar.historys
.filter()
@ -30,11 +30,16 @@ Stream<List<History>> getAllHistoryStream(
Stream<List<Update>> getAllUpdateStream(
Ref ref, {
required ItemType itemType,
String search = "",
}) async* {
yield* isar.updates
.filter()
.idIsNotNull()
.and()
.chapter((q) => q.manga((q) => q.itemTypeEqualTo(itemType)))
.and()
.chapter(
(q) => q.manga((q) => q.nameContains(search, caseSensitive: false)),
)
.watch(fireImmediately: true);
}

View file

@ -7,7 +7,7 @@ part of 'isar_providers.dart';
// **************************************************************************
String _$getAllHistoryStreamHash() =>
r'704060d31ee10db47bb6f9900b0678747f67abbe';
r'1ce5bd0046fbbec46e91b7a486523945699d95f3';
/// Copied from Dart SDK
class _SystemHash {
@ -42,7 +42,7 @@ class GetAllHistoryStreamFamily extends Family<AsyncValue<List<History>>> {
/// See also [getAllHistoryStream].
GetAllHistoryStreamProvider call({
required ItemType itemType,
required String search,
String search = "",
}) {
return GetAllHistoryStreamProvider(
itemType: itemType,
@ -81,7 +81,7 @@ class GetAllHistoryStreamProvider
/// See also [getAllHistoryStream].
GetAllHistoryStreamProvider({
required ItemType itemType,
required String search,
String search = "",
}) : this._internal(
(ref) => getAllHistoryStream(
ref as GetAllHistoryStreamRef,
@ -178,7 +178,7 @@ class _GetAllHistoryStreamProviderElement
}
String _$getAllUpdateStreamHash() =>
r'6a20f8feba3010c2ab7a80560f7a7f6cf10c7366';
r'43369b20d702d12aeae627fcd04ceb61caf0dc74';
/// See also [getAllUpdateStream].
@ProviderFor(getAllUpdateStream)
@ -192,9 +192,11 @@ class GetAllUpdateStreamFamily extends Family<AsyncValue<List<Update>>> {
/// See also [getAllUpdateStream].
GetAllUpdateStreamProvider call({
required ItemType itemType,
String search = "",
}) {
return GetAllUpdateStreamProvider(
itemType: itemType,
search: search,
);
}
@ -204,6 +206,7 @@ class GetAllUpdateStreamFamily extends Family<AsyncValue<List<Update>>> {
) {
return call(
itemType: provider.itemType,
search: provider.search,
);
}
@ -228,10 +231,12 @@ class GetAllUpdateStreamProvider
/// See also [getAllUpdateStream].
GetAllUpdateStreamProvider({
required ItemType itemType,
String search = "",
}) : this._internal(
(ref) => getAllUpdateStream(
ref as GetAllUpdateStreamRef,
itemType: itemType,
search: search,
),
from: getAllUpdateStreamProvider,
name: r'getAllUpdateStreamProvider',
@ -243,6 +248,7 @@ class GetAllUpdateStreamProvider
allTransitiveDependencies:
GetAllUpdateStreamFamily._allTransitiveDependencies,
itemType: itemType,
search: search,
);
GetAllUpdateStreamProvider._internal(
@ -253,9 +259,11 @@ class GetAllUpdateStreamProvider
required super.debugGetCreateSourceHash,
required super.from,
required this.itemType,
required this.search,
}) : super.internal();
final ItemType itemType;
final String search;
@override
Override overrideWith(
@ -271,6 +279,7 @@ class GetAllUpdateStreamProvider
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
itemType: itemType,
search: search,
),
);
}
@ -282,13 +291,16 @@ class GetAllUpdateStreamProvider
@override
bool operator ==(Object other) {
return other is GetAllUpdateStreamProvider && other.itemType == itemType;
return other is GetAllUpdateStreamProvider &&
other.itemType == itemType &&
other.search == search;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, itemType.hashCode);
hash = _SystemHash.combine(hash, search.hashCode);
return _SystemHash.finish(hash);
}
@ -299,6 +311,9 @@ class GetAllUpdateStreamProvider
mixin GetAllUpdateStreamRef on AutoDisposeStreamProviderRef<List<Update>> {
/// The parameter `itemType` of this provider.
ItemType get itemType;
/// The parameter `search` of this provider.
String get search;
}
class _GetAllUpdateStreamProviderElement
@ -308,6 +323,8 @@ class _GetAllUpdateStreamProviderElement
@override
ItemType get itemType => (origin as GetAllUpdateStreamProvider).itemType;
@override
String get search => (origin as GetAllUpdateStreamProvider).search;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

View file

@ -64,7 +64,11 @@ class _UpdatesScreenState extends ConsumerState<UpdatesScreen>
for (var manga in mangaList) {
try {
await ref.read(
updateMangaDetailProvider(mangaId: manga.id, isInit: false, showToast: false).future,
updateMangaDetailProvider(
mangaId: manga.id,
isInit: false,
showToast: false,
).future,
);
} catch (_) {}
numbers++;
@ -335,26 +339,18 @@ class _UpdateTabState extends ConsumerState<UpdateTab> {
Widget build(BuildContext context) {
final l10n = l10nLocalizations(context)!;
final update = ref.watch(
getAllUpdateStreamProvider(itemType: widget.itemType),
getAllUpdateStreamProvider(
itemType: widget.itemType,
search: widget.query,
),
);
return Scaffold(
body: Stack(
children: [
update.when(
data: (data) {
final entries =
data
.where(
(element) =>
widget.query.isNotEmpty
? element.chapter.value!.manga.value!.name!
.toLowerCase()
.contains(widget.query.toLowerCase())
: true,
)
.toList();
data: (entries) {
final lastUpdatedList =
data
entries
.map((e) => e.chapter.value!.manga.value!.lastUpdate!)
.toList();
lastUpdatedList.sort((a, b) => b.compareTo(a));

View file

@ -6,7 +6,7 @@ part of 'aniskip.dart';
// RiverpodGenerator
// **************************************************************************
String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421';
String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c';
/// See also [AniSkip].
@ProviderFor(AniSkip)

View file

@ -6,7 +6,7 @@ part of 'anilist.dart';
// RiverpodGenerator
// **************************************************************************
String _$anilistHash() => r'70e8cd537270a9054a1ef72de117fc7ad5545218';
String _$anilistHash() => r'ddd07acc8d28d2aa95c942566109e9393ca9e5ed';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -41,13 +41,14 @@ Widget cachedCompressedNetworkImage({
AlignmentGeometry? alignment,
bool useCustomNetworkImage = true,
Widget errorWidget = const Icon(Icons.error, size: 50),
int maxBytes = 5 << 10,
}) {
return ExtendedImage(
image: ExtendedResizeImage(
useCustomNetworkImage
? CustomExtendedNetworkImageProvider(imageUrl, headers: headers)
: ExtendedNetworkImageProvider(imageUrl, headers: headers),
maxBytes: 5 << 10,
maxBytes: maxBytes,
),
width: width,
height: height,