✨ Stronger filter
This commit is contained in:
@@ -1310,5 +1310,12 @@
|
||||
"presenceTypeMusic": "Listening to Music",
|
||||
"presenceTypeWorkout": "Working out",
|
||||
"articleCompose": "Compose Article",
|
||||
"backToHub": "Back to Hub"
|
||||
"backToHub": "Back to Hub",
|
||||
"advancedFilters": "Advanced Filters",
|
||||
"searchPosts": "Search Posts",
|
||||
"sortBy": "Sort by",
|
||||
"fromDate": "From Date",
|
||||
"toDate": "To Date",
|
||||
"popularity": "Popularity",
|
||||
"descendingOrder": "Descending Order"
|
||||
}
|
||||
|
||||
@@ -326,21 +326,233 @@ class _PublisherHeatmapWidget extends StatelessWidget {
|
||||
|
||||
class _PublisherCategoryTabWidget extends StatelessWidget {
|
||||
final TabController categoryTabController;
|
||||
final ValueNotifier<bool?> includeReplies;
|
||||
final ValueNotifier<bool> mediaOnly;
|
||||
final ValueNotifier<String?> queryTerm;
|
||||
final ValueNotifier<String?> order;
|
||||
final ValueNotifier<bool> orderDesc;
|
||||
final ValueNotifier<int?> periodStart;
|
||||
final ValueNotifier<int?> periodEnd;
|
||||
final ValueNotifier<bool> showAdvancedFilters;
|
||||
|
||||
const _PublisherCategoryTabWidget({required this.categoryTabController});
|
||||
const _PublisherCategoryTabWidget({
|
||||
required this.categoryTabController,
|
||||
required this.includeReplies,
|
||||
required this.mediaOnly,
|
||||
required this.queryTerm,
|
||||
required this.order,
|
||||
required this.orderDesc,
|
||||
required this.periodStart,
|
||||
required this.periodEnd,
|
||||
required this.showAdvancedFilters,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
margin: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||
child: TabBar(
|
||||
controller: categoryTabController,
|
||||
dividerColor: Colors.transparent,
|
||||
splashBorderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||
tabs: [
|
||||
Tab(text: 'all'.tr()),
|
||||
Tab(text: 'postTypePost'.tr()),
|
||||
Tab(text: 'postArticle'.tr()),
|
||||
child: Column(
|
||||
children: [
|
||||
TabBar(
|
||||
controller: categoryTabController,
|
||||
dividerColor: Colors.transparent,
|
||||
splashBorderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||
tabs: [
|
||||
Tab(text: 'all'.tr()),
|
||||
Tab(text: 'postTypePost'.tr()),
|
||||
Tab(text: 'postArticle'.tr()),
|
||||
],
|
||||
),
|
||||
const Divider(height: 1),
|
||||
Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: CheckboxListTile(
|
||||
title: Text('reply'.tr()),
|
||||
value: includeReplies.value,
|
||||
tristate: true,
|
||||
onChanged: (value) {
|
||||
// Cycle through: null -> false -> true -> null
|
||||
if (includeReplies.value == null) {
|
||||
includeReplies.value = false;
|
||||
} else if (includeReplies.value == false) {
|
||||
includeReplies.value = true;
|
||||
} else {
|
||||
includeReplies.value = null;
|
||||
}
|
||||
},
|
||||
dense: true,
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
secondary: const Icon(Symbols.reply),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: CheckboxListTile(
|
||||
title: Text('attachments'.tr()),
|
||||
value: mediaOnly.value,
|
||||
onChanged: (value) {
|
||||
if (value != null) {
|
||||
mediaOnly.value = value;
|
||||
}
|
||||
},
|
||||
dense: true,
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
secondary: const Icon(Symbols.attachment),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
CheckboxListTile(
|
||||
title: Text('descendingOrder'.tr()),
|
||||
value: orderDesc.value,
|
||||
onChanged: (value) {
|
||||
if (value != null) {
|
||||
orderDesc.value = value;
|
||||
}
|
||||
},
|
||||
dense: true,
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
secondary: const Icon(Symbols.sort),
|
||||
),
|
||||
],
|
||||
),
|
||||
const Divider(height: 1),
|
||||
ListTile(
|
||||
title: Text('advancedFilters'.tr()),
|
||||
leading: const Icon(Symbols.filter_list),
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(const Radius.circular(8)),
|
||||
),
|
||||
trailing: Icon(
|
||||
showAdvancedFilters.value
|
||||
? Symbols.expand_less
|
||||
: Symbols.expand_more,
|
||||
),
|
||||
onTap: () {
|
||||
showAdvancedFilters.value = !showAdvancedFilters.value;
|
||||
},
|
||||
),
|
||||
if (showAdvancedFilters.value) ...[
|
||||
const Divider(height: 1),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
TextField(
|
||||
decoration: InputDecoration(
|
||||
labelText: 'search'.tr(),
|
||||
hintText: 'searchPosts'.tr(),
|
||||
prefixIcon: const Icon(Symbols.search),
|
||||
border: const OutlineInputBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(12)),
|
||||
),
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 12,
|
||||
vertical: 8,
|
||||
),
|
||||
),
|
||||
onChanged: (value) {
|
||||
queryTerm.value = value.isEmpty ? null : value;
|
||||
},
|
||||
),
|
||||
const Gap(12),
|
||||
DropdownButtonFormField<String>(
|
||||
decoration: InputDecoration(
|
||||
labelText: 'sortBy'.tr(),
|
||||
border: const OutlineInputBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(12)),
|
||||
),
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 12,
|
||||
vertical: 8,
|
||||
),
|
||||
),
|
||||
value: order.value,
|
||||
items: [
|
||||
DropdownMenuItem(value: 'date', child: Text('date'.tr())),
|
||||
DropdownMenuItem(
|
||||
value: 'popularity',
|
||||
child: Text('popularity'.tr()),
|
||||
),
|
||||
],
|
||||
onChanged: (value) {
|
||||
order.value = value;
|
||||
},
|
||||
),
|
||||
const Gap(12),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: TextField(
|
||||
decoration: InputDecoration(
|
||||
labelText: 'fromDate'.tr(),
|
||||
hintText: 'YYYY-MM-DD',
|
||||
border: const OutlineInputBorder(
|
||||
borderRadius: BorderRadius.all(
|
||||
Radius.circular(12),
|
||||
),
|
||||
),
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 12,
|
||||
vertical: 8,
|
||||
),
|
||||
),
|
||||
onChanged: (value) {
|
||||
if (value.isEmpty) {
|
||||
periodStart.value = null;
|
||||
} else {
|
||||
try {
|
||||
final date = DateTime.parse(value);
|
||||
periodStart.value =
|
||||
date.millisecondsSinceEpoch ~/ 1000;
|
||||
} catch (_) {
|
||||
periodStart.value = null;
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
const Gap(8),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
decoration: InputDecoration(
|
||||
labelText: 'toDate'.tr(),
|
||||
hintText: 'YYYY-MM-DD',
|
||||
border: const OutlineInputBorder(
|
||||
borderRadius: BorderRadius.all(
|
||||
Radius.circular(12),
|
||||
),
|
||||
),
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 12,
|
||||
vertical: 8,
|
||||
),
|
||||
),
|
||||
onChanged: (value) {
|
||||
if (value.isEmpty) {
|
||||
periodEnd.value = null;
|
||||
} else {
|
||||
try {
|
||||
final date = DateTime.parse(value);
|
||||
periodEnd.value =
|
||||
date.millisecondsSinceEpoch ~/ 1000;
|
||||
} catch (_) {
|
||||
periodEnd.value = null;
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -423,6 +635,16 @@ class PublisherProfileScreen extends HookConsumerWidget {
|
||||
categoryTab.value = categoryTabController.index;
|
||||
});
|
||||
|
||||
final includeReplies = useState<bool?>(null);
|
||||
final mediaOnly = useState(false);
|
||||
final queryTerm = useState<String?>(null);
|
||||
final order = useState<String?>('date'); // 'popularity' or 'date'
|
||||
final orderDesc = useState(
|
||||
true,
|
||||
); // true for descending, false for ascending
|
||||
final periodStart = useState<int?>(null);
|
||||
final periodEnd = useState<int?>(null);
|
||||
final showAdvancedFilters = useState(false);
|
||||
final subscribing = useState(false);
|
||||
|
||||
Future<void> subscribe() async {
|
||||
@@ -498,17 +720,33 @@ class PublisherProfileScreen extends HookConsumerWidget {
|
||||
SliverToBoxAdapter(
|
||||
child: _PublisherCategoryTabWidget(
|
||||
categoryTabController: categoryTabController,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
orderDesc: orderDesc,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
showAdvancedFilters: showAdvancedFilters,
|
||||
),
|
||||
),
|
||||
SliverPostList(
|
||||
key: ValueKey(categoryTab.value),
|
||||
key: ValueKey(
|
||||
'${categoryTab.value}-${includeReplies.value}-${mediaOnly.value}-${queryTerm.value}-${order.value}-${orderDesc.value}-${periodStart.value}-${periodEnd.value}',
|
||||
),
|
||||
pubName: name,
|
||||
pinned: false,
|
||||
type: switch (categoryTab.value) {
|
||||
1 => 0,
|
||||
2 => 1,
|
||||
_ => null,
|
||||
},
|
||||
type:
|
||||
categoryTab.value == 1
|
||||
? 0
|
||||
: (categoryTab.value == 2 ? 1 : null),
|
||||
includeReplies: includeReplies.value,
|
||||
mediaOnly: mediaOnly.value,
|
||||
queryTerm: queryTerm.value,
|
||||
order: order.value,
|
||||
orderDesc: orderDesc.value,
|
||||
periodStart: periodStart.value,
|
||||
periodEnd: periodEnd.value,
|
||||
),
|
||||
SliverGap(
|
||||
MediaQuery.of(context).padding.bottom + 16,
|
||||
@@ -621,17 +859,33 @@ class PublisherProfileScreen extends HookConsumerWidget {
|
||||
SliverToBoxAdapter(
|
||||
child: _PublisherCategoryTabWidget(
|
||||
categoryTabController: categoryTabController,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
orderDesc: orderDesc,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
showAdvancedFilters: showAdvancedFilters,
|
||||
),
|
||||
),
|
||||
SliverPostList(
|
||||
key: ValueKey(categoryTab.value),
|
||||
key: ValueKey(
|
||||
'${categoryTab.value}-${includeReplies.value}-${mediaOnly.value}-${queryTerm.value}-${order.value}-${orderDesc.value}-${periodStart.value}-${periodEnd.value}',
|
||||
),
|
||||
pubName: name,
|
||||
pinned: false,
|
||||
type: switch (categoryTab.value) {
|
||||
1 => 0,
|
||||
2 => 1,
|
||||
_ => null,
|
||||
},
|
||||
type:
|
||||
categoryTab.value == 1
|
||||
? 0
|
||||
: (categoryTab.value == 2 ? 1 : null),
|
||||
includeReplies: includeReplies.value,
|
||||
mediaOnly: mediaOnly.value,
|
||||
queryTerm: queryTerm.value,
|
||||
order: order.value,
|
||||
orderDesc: orderDesc.value,
|
||||
periodStart: periodStart.value,
|
||||
periodEnd: periodEnd.value,
|
||||
),
|
||||
SliverGap(MediaQuery.of(context).padding.bottom + 16),
|
||||
],
|
||||
|
||||
@@ -24,6 +24,12 @@ class PostListNotifier extends _$PostListNotifier
|
||||
bool? pinned,
|
||||
bool shuffle = false,
|
||||
bool? includeReplies,
|
||||
bool? mediaOnly,
|
||||
String? queryTerm,
|
||||
String? order,
|
||||
int? periodStart,
|
||||
int? periodEnd,
|
||||
bool orderDesc = true,
|
||||
}) {
|
||||
return fetch(cursor: null);
|
||||
}
|
||||
@@ -36,14 +42,20 @@ class PostListNotifier extends _$PostListNotifier
|
||||
final queryParams = {
|
||||
'offset': offset,
|
||||
'take': _pageSize,
|
||||
'replies': includeReplies,
|
||||
'orderDesc': orderDesc,
|
||||
if (shuffle) 'shuffle': shuffle,
|
||||
if (pubName != null) 'pub': pubName,
|
||||
if (realm != null) 'realm': realm,
|
||||
if (type != null) 'type': type,
|
||||
if (tags != null) 'tags': tags,
|
||||
if (categories != null) 'categories': categories,
|
||||
if (shuffle) 'shuffle': true,
|
||||
if (pinned != null) 'pinned': pinned,
|
||||
if (includeReplies != null) 'includeReplies': includeReplies,
|
||||
if (order != null) 'order': order,
|
||||
if (periodStart != null) 'periodStart': periodStart,
|
||||
if (periodEnd != null) 'periodEnd': periodEnd,
|
||||
if (queryTerm != null) 'query': queryTerm,
|
||||
if (mediaOnly != null) 'media': mediaOnly,
|
||||
};
|
||||
|
||||
final response = await client.get(
|
||||
@@ -82,6 +94,14 @@ class SliverPostList extends HookConsumerWidget {
|
||||
final List<String>? tags;
|
||||
final bool shuffle;
|
||||
final bool? pinned;
|
||||
final bool? includeReplies;
|
||||
final bool? mediaOnly;
|
||||
final String? queryTerm;
|
||||
// Can be "populaurity", other value will be treated as "date"
|
||||
final String? order;
|
||||
final int? periodStart;
|
||||
final int? periodEnd;
|
||||
final bool? orderDesc;
|
||||
final PostItemType itemType;
|
||||
final Color? backgroundColor;
|
||||
final EdgeInsets? padding;
|
||||
@@ -99,6 +119,13 @@ class SliverPostList extends HookConsumerWidget {
|
||||
this.tags,
|
||||
this.shuffle = false,
|
||||
this.pinned,
|
||||
this.includeReplies,
|
||||
this.mediaOnly,
|
||||
this.queryTerm,
|
||||
this.order,
|
||||
this.orderDesc = true,
|
||||
this.periodStart,
|
||||
this.periodEnd,
|
||||
this.itemType = PostItemType.regular,
|
||||
this.backgroundColor,
|
||||
this.padding,
|
||||
@@ -118,6 +145,13 @@ class SliverPostList extends HookConsumerWidget {
|
||||
tags: tags,
|
||||
shuffle: shuffle,
|
||||
pinned: pinned,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
orderDesc: orderDesc ?? true,
|
||||
);
|
||||
return PagingHelperSliverView(
|
||||
provider: provider,
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'post_list.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$postListNotifierHash() => r'fc139ad4df0deb67bcbb949560319f2f7fbfb503';
|
||||
String _$postListNotifierHash() => r'8241120dc3c2004387c6cf881e5cb9224cbd3a97';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
@@ -39,6 +39,12 @@ abstract class _$PostListNotifier
|
||||
late final bool? pinned;
|
||||
late final bool shuffle;
|
||||
late final bool? includeReplies;
|
||||
late final bool? mediaOnly;
|
||||
late final String? queryTerm;
|
||||
late final String? order;
|
||||
late final int? periodStart;
|
||||
late final int? periodEnd;
|
||||
late final bool orderDesc;
|
||||
|
||||
FutureOr<CursorPagingData<SnPost>> build({
|
||||
String? pubName,
|
||||
@@ -49,6 +55,12 @@ abstract class _$PostListNotifier
|
||||
bool? pinned,
|
||||
bool shuffle = false,
|
||||
bool? includeReplies,
|
||||
bool? mediaOnly,
|
||||
String? queryTerm,
|
||||
String? order,
|
||||
int? periodStart,
|
||||
int? periodEnd,
|
||||
bool orderDesc = true,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -72,6 +84,12 @@ class PostListNotifierFamily
|
||||
bool? pinned,
|
||||
bool shuffle = false,
|
||||
bool? includeReplies,
|
||||
bool? mediaOnly,
|
||||
String? queryTerm,
|
||||
String? order,
|
||||
int? periodStart,
|
||||
int? periodEnd,
|
||||
bool orderDesc = true,
|
||||
}) {
|
||||
return PostListNotifierProvider(
|
||||
pubName: pubName,
|
||||
@@ -82,6 +100,12 @@ class PostListNotifierFamily
|
||||
pinned: pinned,
|
||||
shuffle: shuffle,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
orderDesc: orderDesc,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -98,6 +122,12 @@ class PostListNotifierFamily
|
||||
pinned: provider.pinned,
|
||||
shuffle: provider.shuffle,
|
||||
includeReplies: provider.includeReplies,
|
||||
mediaOnly: provider.mediaOnly,
|
||||
queryTerm: provider.queryTerm,
|
||||
order: provider.order,
|
||||
periodStart: provider.periodStart,
|
||||
periodEnd: provider.periodEnd,
|
||||
orderDesc: provider.orderDesc,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -133,6 +163,12 @@ class PostListNotifierProvider
|
||||
bool? pinned,
|
||||
bool shuffle = false,
|
||||
bool? includeReplies,
|
||||
bool? mediaOnly,
|
||||
String? queryTerm,
|
||||
String? order,
|
||||
int? periodStart,
|
||||
int? periodEnd,
|
||||
bool orderDesc = true,
|
||||
}) : this._internal(
|
||||
() =>
|
||||
PostListNotifier()
|
||||
@@ -143,7 +179,13 @@ class PostListNotifierProvider
|
||||
..tags = tags
|
||||
..pinned = pinned
|
||||
..shuffle = shuffle
|
||||
..includeReplies = includeReplies,
|
||||
..includeReplies = includeReplies
|
||||
..mediaOnly = mediaOnly
|
||||
..queryTerm = queryTerm
|
||||
..order = order
|
||||
..periodStart = periodStart
|
||||
..periodEnd = periodEnd
|
||||
..orderDesc = orderDesc,
|
||||
from: postListNotifierProvider,
|
||||
name: r'postListNotifierProvider',
|
||||
debugGetCreateSourceHash:
|
||||
@@ -161,6 +203,12 @@ class PostListNotifierProvider
|
||||
pinned: pinned,
|
||||
shuffle: shuffle,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
orderDesc: orderDesc,
|
||||
);
|
||||
|
||||
PostListNotifierProvider._internal(
|
||||
@@ -178,6 +226,12 @@ class PostListNotifierProvider
|
||||
required this.pinned,
|
||||
required this.shuffle,
|
||||
required this.includeReplies,
|
||||
required this.mediaOnly,
|
||||
required this.queryTerm,
|
||||
required this.order,
|
||||
required this.periodStart,
|
||||
required this.periodEnd,
|
||||
required this.orderDesc,
|
||||
}) : super.internal();
|
||||
|
||||
final String? pubName;
|
||||
@@ -188,6 +242,12 @@ class PostListNotifierProvider
|
||||
final bool? pinned;
|
||||
final bool shuffle;
|
||||
final bool? includeReplies;
|
||||
final bool? mediaOnly;
|
||||
final String? queryTerm;
|
||||
final String? order;
|
||||
final int? periodStart;
|
||||
final int? periodEnd;
|
||||
final bool orderDesc;
|
||||
|
||||
@override
|
||||
FutureOr<CursorPagingData<SnPost>> runNotifierBuild(
|
||||
@@ -202,6 +262,12 @@ class PostListNotifierProvider
|
||||
pinned: pinned,
|
||||
shuffle: shuffle,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
orderDesc: orderDesc,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -219,7 +285,13 @@ class PostListNotifierProvider
|
||||
..tags = tags
|
||||
..pinned = pinned
|
||||
..shuffle = shuffle
|
||||
..includeReplies = includeReplies,
|
||||
..includeReplies = includeReplies
|
||||
..mediaOnly = mediaOnly
|
||||
..queryTerm = queryTerm
|
||||
..order = order
|
||||
..periodStart = periodStart
|
||||
..periodEnd = periodEnd
|
||||
..orderDesc = orderDesc,
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
@@ -233,6 +305,12 @@ class PostListNotifierProvider
|
||||
pinned: pinned,
|
||||
shuffle: shuffle,
|
||||
includeReplies: includeReplies,
|
||||
mediaOnly: mediaOnly,
|
||||
queryTerm: queryTerm,
|
||||
order: order,
|
||||
periodStart: periodStart,
|
||||
periodEnd: periodEnd,
|
||||
orderDesc: orderDesc,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -256,7 +334,13 @@ class PostListNotifierProvider
|
||||
other.tags == tags &&
|
||||
other.pinned == pinned &&
|
||||
other.shuffle == shuffle &&
|
||||
other.includeReplies == includeReplies;
|
||||
other.includeReplies == includeReplies &&
|
||||
other.mediaOnly == mediaOnly &&
|
||||
other.queryTerm == queryTerm &&
|
||||
other.order == order &&
|
||||
other.periodStart == periodStart &&
|
||||
other.periodEnd == periodEnd &&
|
||||
other.orderDesc == orderDesc;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -270,6 +354,12 @@ class PostListNotifierProvider
|
||||
hash = _SystemHash.combine(hash, pinned.hashCode);
|
||||
hash = _SystemHash.combine(hash, shuffle.hashCode);
|
||||
hash = _SystemHash.combine(hash, includeReplies.hashCode);
|
||||
hash = _SystemHash.combine(hash, mediaOnly.hashCode);
|
||||
hash = _SystemHash.combine(hash, queryTerm.hashCode);
|
||||
hash = _SystemHash.combine(hash, order.hashCode);
|
||||
hash = _SystemHash.combine(hash, periodStart.hashCode);
|
||||
hash = _SystemHash.combine(hash, periodEnd.hashCode);
|
||||
hash = _SystemHash.combine(hash, orderDesc.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
@@ -302,6 +392,24 @@ mixin PostListNotifierRef
|
||||
|
||||
/// The parameter `includeReplies` of this provider.
|
||||
bool? get includeReplies;
|
||||
|
||||
/// The parameter `mediaOnly` of this provider.
|
||||
bool? get mediaOnly;
|
||||
|
||||
/// The parameter `queryTerm` of this provider.
|
||||
String? get queryTerm;
|
||||
|
||||
/// The parameter `order` of this provider.
|
||||
String? get order;
|
||||
|
||||
/// The parameter `periodStart` of this provider.
|
||||
int? get periodStart;
|
||||
|
||||
/// The parameter `periodEnd` of this provider.
|
||||
int? get periodEnd;
|
||||
|
||||
/// The parameter `orderDesc` of this provider.
|
||||
bool get orderDesc;
|
||||
}
|
||||
|
||||
class _PostListNotifierProviderElement
|
||||
@@ -331,6 +439,18 @@ class _PostListNotifierProviderElement
|
||||
@override
|
||||
bool? get includeReplies =>
|
||||
(origin as PostListNotifierProvider).includeReplies;
|
||||
@override
|
||||
bool? get mediaOnly => (origin as PostListNotifierProvider).mediaOnly;
|
||||
@override
|
||||
String? get queryTerm => (origin as PostListNotifierProvider).queryTerm;
|
||||
@override
|
||||
String? get order => (origin as PostListNotifierProvider).order;
|
||||
@override
|
||||
int? get periodStart => (origin as PostListNotifierProvider).periodStart;
|
||||
@override
|
||||
int? get periodEnd => (origin as PostListNotifierProvider).periodEnd;
|
||||
@override
|
||||
bool get orderDesc => (origin as PostListNotifierProvider).orderDesc;
|
||||
}
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
Reference in New Issue
Block a user