From 29574ada88786d82c8ccf35d6543f996d3192bf7 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Fri, 5 Dec 2025 01:57:10 +0800 Subject: [PATCH] :lipstick: New sticker marketplace card --- lib/screens/stickers/sticker_marketplace.dart | 334 +++++++++++------- .../stickers/sticker_marketplace.freezed.dart | 268 ++++++++++++++ .../stickers/sticker_marketplace.g.dart | 213 ----------- 3 files changed, 483 insertions(+), 332 deletions(-) create mode 100644 lib/screens/stickers/sticker_marketplace.freezed.dart delete mode 100644 lib/screens/stickers/sticker_marketplace.g.dart diff --git a/lib/screens/stickers/sticker_marketplace.dart b/lib/screens/stickers/sticker_marketplace.dart index 936616b1..0dcff740 100644 --- a/lib/screens/stickers/sticker_marketplace.dart +++ b/lib/screens/stickers/sticker_marketplace.dart @@ -1,60 +1,72 @@ +import 'dart:math' as math; + import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:go_router/go_router.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/sticker.dart'; import 'package:island/pods/network.dart'; +import 'package:island/pods/paging.dart'; import 'package:island/widgets/app_scaffold.dart'; +import 'package:island/widgets/content/cloud_files.dart'; +import 'package:island/widgets/paging/pagination_list.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'dart:async'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:riverpod_paging_utils/riverpod_paging_utils.dart'; +import 'package:styled_widget/styled_widget.dart'; -part 'sticker_marketplace.g.dart'; +part 'sticker_marketplace.freezed.dart'; -@riverpod -class MarketplaceStickerPacksNotifier extends _$MarketplaceStickerPacksNotifier - with CursorPagingNotifierMixin { - @override - Future> build({ - required String? query, +@freezed +sealed class MarketplaceStickerQuery with _$MarketplaceStickerQuery { + const factory MarketplaceStickerQuery({ required bool byUsage, - }) { - return fetch(cursor: null); - } + required String? query, + }) = _MarketplaceStickerQuery; +} + +final marketplaceStickerPacksNotifierProvider = AsyncNotifierProvider( + MarketplaceStickerPacksNotifier.new, +); + +class MarketplaceStickerPacksNotifier extends AsyncNotifier> + with + AsyncPaginationController, + AsyncPaginationFilter { + static const int pageSize = 20; @override - Future> fetch({ - required String? cursor, - }) async { + MarketplaceStickerQuery currentFilter = MarketplaceStickerQuery( + byUsage: true, + query: null, + ); + + @override + Future> fetch() async { final client = ref.read(apiClientProvider); - final offset = cursor == null ? 0 : int.parse(cursor); final response = await client.get( '/sphere/stickers', queryParameters: { - 'offset': offset, - 'take': 20, - 'order': byUsage ? 'usage' : 'date', - if (query != null && query!.isNotEmpty) 'query': query, + 'offset': fetchedCount.toString(), + 'take': pageSize, + 'order': currentFilter.byUsage ? 'usage' : 'date', + if (currentFilter.query != null && currentFilter.query!.isNotEmpty) + 'query': currentFilter.query, }, ); - final total = int.parse(response.headers.value('X-Total') ?? '0'); - final List data = response.data; - final stickers = data.map((e) => SnStickerPack.fromJson(e)).toList(); + totalCount = int.parse(response.headers.value('X-Total') ?? '0'); + final stickers = + response.data + .map((e) => SnStickerPack.fromJson(e)) + .cast() + .toList(); - final hasMore = offset + stickers.length < total; - final nextCursor = hasMore ? (offset + stickers.length).toString() : null; - - return CursorPagingData( - items: stickers, - hasMore: hasMore, - nextCursor: nextCursor, - ); + return stickers; } } @@ -65,17 +77,23 @@ class MarketplaceStickersScreen extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final byUsage = useState(true); - final query = useState(null); + final query = useState( + MarketplaceStickerQuery(byUsage: true, query: null), + ); final searchController = useTextEditingController(); final focusNode = useFocusNode(); final debounceTimer = useState(null); + final notifier = ref.watch( + marketplaceStickerPacksNotifierProvider.notifier, + ); + // Clear search when query is cleared useEffect(() { - if (query.value == null || query.value!.isEmpty) { + if (query.value.query == null || query.value.query!.isEmpty) { searchController.clear(); } + notifier.applyFilter(query.value); return null; }, [query]); @@ -92,107 +110,185 @@ class MarketplaceStickersScreen extends HookConsumerWidget { actions: [ IconButton( onPressed: () { - byUsage.value = !byUsage.value; + query.value = query.value.copyWith(byUsage: !query.value.byUsage); }, icon: - byUsage.value + query.value.byUsage ? const Icon(Symbols.local_fire_department) : const Icon(Symbols.access_time), tooltip: - byUsage.value + query.value.byUsage ? 'orderByPopularity'.tr() : 'orderByReleaseDate'.tr(), ), const Gap(8), ], ), - body: PagingHelperView( - provider: marketplaceStickerPacksNotifierProvider( - byUsage: byUsage.value, - query: query.value, - ), - futureRefreshable: - marketplaceStickerPacksNotifierProvider( - byUsage: byUsage.value, - query: query.value, - ).future, - notifierRefreshable: - marketplaceStickerPacksNotifierProvider( - byUsage: byUsage.value, - query: query.value, - ).notifier, - contentBuilder: - (data, widgetCount, endItemView) => Column( - children: [ - // Search bar above the list - Padding( - padding: const EdgeInsets.all(16), - child: SearchBar( - elevation: WidgetStateProperty.all(4), - controller: searchController, - focusNode: focusNode, - hintText: 'search'.tr(), - leading: const Icon(Symbols.search), - padding: WidgetStateProperty.all( - const EdgeInsets.symmetric(horizontal: 24), - ), - onTapOutside: - (_) => FocusManager.instance.primaryFocus?.unfocus(), - trailing: [ - if (query.value != null && query.value!.isNotEmpty) - IconButton( - icon: const Icon(Symbols.close), - onPressed: () { - query.value = null; - searchController.clear(); - focusNode.unfocus(); - }, - ), - ], - onChanged: (value) { - // Debounce search to avoid excessive API calls - debounceTimer.value?.cancel(); - debounceTimer.value = Timer( - const Duration(milliseconds: 500), - () { - query.value = value.isEmpty ? null : value; - }, - ); - }, - onSubmitted: (value) { - query.value = value.isEmpty ? null : value; + body: Column( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 16, 0), + child: SearchBar( + elevation: WidgetStateProperty.all(4), + controller: searchController, + focusNode: focusNode, + hintText: 'search'.tr(), + leading: const Icon(Symbols.search), + padding: WidgetStateProperty.all( + const EdgeInsets.symmetric(horizontal: 24), + ), + onTapOutside: + (_) => FocusManager.instance.primaryFocus?.unfocus(), + trailing: [ + if (query.value.query != null && query.value.query!.isNotEmpty) + IconButton( + icon: const Icon(Symbols.close), + onPressed: () { + query.value = query.value.copyWith(query: null); + searchController.clear(); focusNode.unfocus(); }, ), - ), - Expanded( - child: ListView.builder( - padding: EdgeInsets.zero, - itemCount: widgetCount, - itemBuilder: (context, index) { - if (index == widgetCount - 1) { - return endItemView; - } - - final pack = data.items[index]; - return ListTile( - title: Text(pack.name), - subtitle: Text(pack.description), - trailing: const Icon(Symbols.chevron_right), - onTap: () { - // Navigate to user-facing sticker pack detail page. - // Adjust the route name/parameters if your app uses different ones. - context.pushNamed( - 'stickerPackDetail', - pathParameters: {'packId': pack.id}, - ); - }, - ); - }, - ), - ), ], + onChanged: (value) { + // Debounce search to avoid excessive API calls + debounceTimer.value?.cancel(); + debounceTimer.value = Timer( + const Duration(milliseconds: 500), + () { + query.value = query.value.copyWith(query: value); + }, + ); + }, + onSubmitted: (value) { + query.value = query.value.copyWith(query: value); + focusNode.unfocus(); + }, ), + ), + Expanded( + child: PaginationList( + padding: EdgeInsets.only(top: 8), + provider: marketplaceStickerPacksNotifierProvider, + notifier: marketplaceStickerPacksNotifierProvider.notifier, + itemBuilder: + (context, idx, pack) => Card( + margin: EdgeInsets.symmetric(horizontal: 12, vertical: 4), + child: Column( + children: [ + Container( + color: + Theme.of(context).colorScheme.secondaryContainer, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 20, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate( + math.min(pack.stickers.length, 4), + (index) => Padding( + padding: EdgeInsets.only( + right: index < 3 ? 8 : 0, + ), + child: Container( + constraints: const BoxConstraints( + maxWidth: 80, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 8, + ), + color: + Theme.of( + context, + ).colorScheme.tertiaryContainer, + ), + child: CloudImageWidget( + file: pack.stickers[index].image, + ), + ).clipRRect(all: 8), + ), + ), + ), + if (pack.stickers.length > 4) + const SizedBox(height: 8), + if (pack.stickers.length > 4) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate( + math.min(pack.stickers.length - 4, 4), + (index) => Padding( + padding: EdgeInsets.only( + right: index < 3 ? 8 : 0, + ), + child: Container( + constraints: const BoxConstraints( + maxWidth: 80, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 8, + ), + color: + Theme.of( + context, + ).colorScheme.tertiaryContainer, + ), + child: CloudImageWidget( + file: + pack.stickers[index + 4].image, + ), + ).clipRRect(all: 8), + ), + ), + ), + ], + ), + ), + ).clipRRect(topLeft: 8, topRight: 8), + ListTile( + leading: Container( + decoration: BoxDecoration( + color: + Theme.of( + context, + ).colorScheme.tertiaryContainer, + borderRadius: const BorderRadius.all( + Radius.circular(8), + ), + ), + child: CloudImageWidget( + file: pack.icon ?? pack.stickers.first.image, + ), + ).width(40).height(40).clipRRect(all: 8), + shape: RoundedRectangleBorder( + borderRadius: const BorderRadius.all( + Radius.circular(8), + ), + ), + title: Text(pack.name), + subtitle: Text(pack.description), + trailing: const Icon(Symbols.chevron_right), + onTap: () { + // Navigate to user-facing sticker pack detail page. + // Adjust the route name/parameters if your app uses different ones. + context.pushNamed( + 'stickerPackDetail', + pathParameters: {'packId': pack.id}, + ); + }, + ), + ], + ), + ), + ), + ), + ], ), ); } diff --git a/lib/screens/stickers/sticker_marketplace.freezed.dart b/lib/screens/stickers/sticker_marketplace.freezed.dart new file mode 100644 index 00000000..d1b7d322 --- /dev/null +++ b/lib/screens/stickers/sticker_marketplace.freezed.dart @@ -0,0 +1,268 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'sticker_marketplace.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; +/// @nodoc +mixin _$MarketplaceStickerQuery { + + bool get byUsage; String? get query; +/// Create a copy of MarketplaceStickerQuery +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$MarketplaceStickerQueryCopyWith get copyWith => _$MarketplaceStickerQueryCopyWithImpl(this as MarketplaceStickerQuery, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is MarketplaceStickerQuery&&(identical(other.byUsage, byUsage) || other.byUsage == byUsage)&&(identical(other.query, query) || other.query == query)); +} + + +@override +int get hashCode => Object.hash(runtimeType,byUsage,query); + +@override +String toString() { + return 'MarketplaceStickerQuery(byUsage: $byUsage, query: $query)'; +} + + +} + +/// @nodoc +abstract mixin class $MarketplaceStickerQueryCopyWith<$Res> { + factory $MarketplaceStickerQueryCopyWith(MarketplaceStickerQuery value, $Res Function(MarketplaceStickerQuery) _then) = _$MarketplaceStickerQueryCopyWithImpl; +@useResult +$Res call({ + bool byUsage, String? query +}); + + + + +} +/// @nodoc +class _$MarketplaceStickerQueryCopyWithImpl<$Res> + implements $MarketplaceStickerQueryCopyWith<$Res> { + _$MarketplaceStickerQueryCopyWithImpl(this._self, this._then); + + final MarketplaceStickerQuery _self; + final $Res Function(MarketplaceStickerQuery) _then; + +/// Create a copy of MarketplaceStickerQuery +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? byUsage = null,Object? query = freezed,}) { + return _then(_self.copyWith( +byUsage: null == byUsage ? _self.byUsage : byUsage // ignore: cast_nullable_to_non_nullable +as bool,query: freezed == query ? _self.query : query // ignore: cast_nullable_to_non_nullable +as String?, + )); +} + +} + + +/// Adds pattern-matching-related methods to [MarketplaceStickerQuery]. +extension MarketplaceStickerQueryPatterns on MarketplaceStickerQuery { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _MarketplaceStickerQuery value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _MarketplaceStickerQuery() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _MarketplaceStickerQuery value) $default,){ +final _that = this; +switch (_that) { +case _MarketplaceStickerQuery(): +return $default(_that);} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _MarketplaceStickerQuery value)? $default,){ +final _that = this; +switch (_that) { +case _MarketplaceStickerQuery() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( bool byUsage, String? query)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _MarketplaceStickerQuery() when $default != null: +return $default(_that.byUsage,_that.query);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( bool byUsage, String? query) $default,) {final _that = this; +switch (_that) { +case _MarketplaceStickerQuery(): +return $default(_that.byUsage,_that.query);} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( bool byUsage, String? query)? $default,) {final _that = this; +switch (_that) { +case _MarketplaceStickerQuery() when $default != null: +return $default(_that.byUsage,_that.query);case _: + return null; + +} +} + +} + +/// @nodoc + + +class _MarketplaceStickerQuery implements MarketplaceStickerQuery { + const _MarketplaceStickerQuery({required this.byUsage, required this.query}); + + +@override final bool byUsage; +@override final String? query; + +/// Create a copy of MarketplaceStickerQuery +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$MarketplaceStickerQueryCopyWith<_MarketplaceStickerQuery> get copyWith => __$MarketplaceStickerQueryCopyWithImpl<_MarketplaceStickerQuery>(this, _$identity); + + + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _MarketplaceStickerQuery&&(identical(other.byUsage, byUsage) || other.byUsage == byUsage)&&(identical(other.query, query) || other.query == query)); +} + + +@override +int get hashCode => Object.hash(runtimeType,byUsage,query); + +@override +String toString() { + return 'MarketplaceStickerQuery(byUsage: $byUsage, query: $query)'; +} + + +} + +/// @nodoc +abstract mixin class _$MarketplaceStickerQueryCopyWith<$Res> implements $MarketplaceStickerQueryCopyWith<$Res> { + factory _$MarketplaceStickerQueryCopyWith(_MarketplaceStickerQuery value, $Res Function(_MarketplaceStickerQuery) _then) = __$MarketplaceStickerQueryCopyWithImpl; +@override @useResult +$Res call({ + bool byUsage, String? query +}); + + + + +} +/// @nodoc +class __$MarketplaceStickerQueryCopyWithImpl<$Res> + implements _$MarketplaceStickerQueryCopyWith<$Res> { + __$MarketplaceStickerQueryCopyWithImpl(this._self, this._then); + + final _MarketplaceStickerQuery _self; + final $Res Function(_MarketplaceStickerQuery) _then; + +/// Create a copy of MarketplaceStickerQuery +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? byUsage = null,Object? query = freezed,}) { + return _then(_MarketplaceStickerQuery( +byUsage: null == byUsage ? _self.byUsage : byUsage // ignore: cast_nullable_to_non_nullable +as bool,query: freezed == query ? _self.query : query // ignore: cast_nullable_to_non_nullable +as String?, + )); +} + + +} + +// dart format on diff --git a/lib/screens/stickers/sticker_marketplace.g.dart b/lib/screens/stickers/sticker_marketplace.g.dart deleted file mode 100644 index 9065c875..00000000 --- a/lib/screens/stickers/sticker_marketplace.g.dart +++ /dev/null @@ -1,213 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'sticker_marketplace.dart'; - -// ************************************************************************** -// RiverpodGenerator -// ************************************************************************** - -String _$marketplaceStickerPacksNotifierHash() => - r'3bde76e18bb024f45ff6261fe735cdba97b02808'; - -/// 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 _$MarketplaceStickerPacksNotifier - extends BuildlessAutoDisposeAsyncNotifier> { - late final String? query; - late final bool byUsage; - - FutureOr> build({ - required String? query, - required bool byUsage, - }); -} - -/// See also [MarketplaceStickerPacksNotifier]. -@ProviderFor(MarketplaceStickerPacksNotifier) -const marketplaceStickerPacksNotifierProvider = - MarketplaceStickerPacksNotifierFamily(); - -/// See also [MarketplaceStickerPacksNotifier]. -class MarketplaceStickerPacksNotifierFamily - extends Family>> { - /// See also [MarketplaceStickerPacksNotifier]. - const MarketplaceStickerPacksNotifierFamily(); - - /// See also [MarketplaceStickerPacksNotifier]. - MarketplaceStickerPacksNotifierProvider call({ - required String? query, - required bool byUsage, - }) { - return MarketplaceStickerPacksNotifierProvider( - query: query, - byUsage: byUsage, - ); - } - - @override - MarketplaceStickerPacksNotifierProvider getProviderOverride( - covariant MarketplaceStickerPacksNotifierProvider provider, - ) { - return call(query: provider.query, byUsage: provider.byUsage); - } - - 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'marketplaceStickerPacksNotifierProvider'; -} - -/// See also [MarketplaceStickerPacksNotifier]. -class MarketplaceStickerPacksNotifierProvider - extends - AutoDisposeAsyncNotifierProviderImpl< - MarketplaceStickerPacksNotifier, - CursorPagingData - > { - /// See also [MarketplaceStickerPacksNotifier]. - MarketplaceStickerPacksNotifierProvider({ - required String? query, - required bool byUsage, - }) : this._internal( - () => - MarketplaceStickerPacksNotifier() - ..query = query - ..byUsage = byUsage, - from: marketplaceStickerPacksNotifierProvider, - name: r'marketplaceStickerPacksNotifierProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$marketplaceStickerPacksNotifierHash, - dependencies: MarketplaceStickerPacksNotifierFamily._dependencies, - allTransitiveDependencies: - MarketplaceStickerPacksNotifierFamily._allTransitiveDependencies, - query: query, - byUsage: byUsage, - ); - - MarketplaceStickerPacksNotifierProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.query, - required this.byUsage, - }) : super.internal(); - - final String? query; - final bool byUsage; - - @override - FutureOr> runNotifierBuild( - covariant MarketplaceStickerPacksNotifier notifier, - ) { - return notifier.build(query: query, byUsage: byUsage); - } - - @override - Override overrideWith(MarketplaceStickerPacksNotifier Function() create) { - return ProviderOverride( - origin: this, - override: MarketplaceStickerPacksNotifierProvider._internal( - () => - create() - ..query = query - ..byUsage = byUsage, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - query: query, - byUsage: byUsage, - ), - ); - } - - @override - AutoDisposeAsyncNotifierProviderElement< - MarketplaceStickerPacksNotifier, - CursorPagingData - > - createElement() { - return _MarketplaceStickerPacksNotifierProviderElement(this); - } - - @override - bool operator ==(Object other) { - return other is MarketplaceStickerPacksNotifierProvider && - other.query == query && - other.byUsage == byUsage; - } - - @override - int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, query.hashCode); - hash = _SystemHash.combine(hash, byUsage.hashCode); - - return _SystemHash.finish(hash); - } -} - -@Deprecated('Will be removed in 3.0. Use Ref instead') -// ignore: unused_element -mixin MarketplaceStickerPacksNotifierRef - on AutoDisposeAsyncNotifierProviderRef> { - /// The parameter `query` of this provider. - String? get query; - - /// The parameter `byUsage` of this provider. - bool get byUsage; -} - -class _MarketplaceStickerPacksNotifierProviderElement - extends - AutoDisposeAsyncNotifierProviderElement< - MarketplaceStickerPacksNotifier, - CursorPagingData - > - with MarketplaceStickerPacksNotifierRef { - _MarketplaceStickerPacksNotifierProviderElement(super.provider); - - @override - String? get query => - (origin as MarketplaceStickerPacksNotifierProvider).query; - @override - bool get byUsage => - (origin as MarketplaceStickerPacksNotifierProvider).byUsage; -} - -// 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