Added read status selector
This commit is contained in:
@@ -7,3 +7,5 @@ enum SelectedTheme { system, light, dark }
|
|||||||
enum AuthResult { success, invalidToken, other }
|
enum AuthResult { success, invalidToken, other }
|
||||||
|
|
||||||
enum FilteredBookmarksMode { tag, shared, archived }
|
enum FilteredBookmarksMode { tag, shared, archived }
|
||||||
|
|
||||||
|
enum ReadStatus { all, unread, read }
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
/// To regenerate, run: `dart run slang`
|
/// To regenerate, run: `dart run slang`
|
||||||
///
|
///
|
||||||
/// Locales: 2
|
/// Locales: 2
|
||||||
/// Strings: 332 (166 per locale)
|
/// Strings: 348 (174 per locale)
|
||||||
///
|
///
|
||||||
/// Built on 2024-02-28 at 00:11 UTC
|
/// Built on 2024-02-28 at 14:44 UTC
|
||||||
|
|
||||||
// coverage:ignore-file
|
// coverage:ignore-file
|
||||||
// ignore_for_file: type=lint
|
// ignore_for_file: type=lint
|
||||||
@@ -172,6 +172,7 @@ class _StringsGenericEn {
|
|||||||
String get error => 'Error';
|
String get error => 'Error';
|
||||||
String get optional => 'Optional';
|
String get optional => 'Optional';
|
||||||
String get authTokenNotValid => 'Your authorization token is not valid anymore. Please, reauthenticate.';
|
String get authTokenNotValid => 'Your authorization token is not valid anymore. Please, reauthenticate.';
|
||||||
|
String get options => 'Options';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: onboarding
|
// Path: onboarding
|
||||||
@@ -226,6 +227,13 @@ class _StringsBookmarksEn {
|
|||||||
late final _StringsBookmarksDatesEn dates = _StringsBookmarksDatesEn._(_root);
|
late final _StringsBookmarksDatesEn dates = _StringsBookmarksDatesEn._(_root);
|
||||||
String get shared => 'Shared';
|
String get shared => 'Shared';
|
||||||
String get archived => 'Archived';
|
String get archived => 'Archived';
|
||||||
|
String get showOnlyRead => 'Show only read';
|
||||||
|
String get showOnlyUnread => 'Show only unread';
|
||||||
|
String get showAllBookmarks => 'Show all bookmarks';
|
||||||
|
String get readStatus => 'Read status';
|
||||||
|
String get all => 'All';
|
||||||
|
String get unread => 'Unread';
|
||||||
|
String get read => 'Read';
|
||||||
late final _StringsBookmarksAddBookmarkEn addBookmark = _StringsBookmarksAddBookmarkEn._(_root);
|
late final _StringsBookmarksAddBookmarkEn addBookmark = _StringsBookmarksAddBookmarkEn._(_root);
|
||||||
late final _StringsBookmarksSearchEn search = _StringsBookmarksSearchEn._(_root);
|
late final _StringsBookmarksSearchEn search = _StringsBookmarksSearchEn._(_root);
|
||||||
late final _StringsBookmarksBookmarkOptionsEn bookmarkOptions = _StringsBookmarksBookmarkOptionsEn._(_root);
|
late final _StringsBookmarksBookmarkOptionsEn bookmarkOptions = _StringsBookmarksBookmarkOptionsEn._(_root);
|
||||||
@@ -534,6 +542,7 @@ class _StringsGenericEs implements _StringsGenericEn {
|
|||||||
@override String get error => 'Error';
|
@override String get error => 'Error';
|
||||||
@override String get optional => 'Opcional';
|
@override String get optional => 'Opcional';
|
||||||
@override String get authTokenNotValid => 'Su token de autorización ya no es válido. Por favor, vuelva a autenticarse.';
|
@override String get authTokenNotValid => 'Su token de autorización ya no es válido. Por favor, vuelva a autenticarse.';
|
||||||
|
@override String get options => 'Opciones';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: onboarding
|
// Path: onboarding
|
||||||
@@ -588,6 +597,13 @@ class _StringsBookmarksEs implements _StringsBookmarksEn {
|
|||||||
@override late final _StringsBookmarksDatesEs dates = _StringsBookmarksDatesEs._(_root);
|
@override late final _StringsBookmarksDatesEs dates = _StringsBookmarksDatesEs._(_root);
|
||||||
@override String get shared => 'Compartidos';
|
@override String get shared => 'Compartidos';
|
||||||
@override String get archived => 'Archivados';
|
@override String get archived => 'Archivados';
|
||||||
|
@override String get showOnlyRead => 'Mostrar solo leídos';
|
||||||
|
@override String get showOnlyUnread => 'Mostrar solo no leídos';
|
||||||
|
@override String get showAllBookmarks => 'Mostrar todos los marcadores';
|
||||||
|
@override String get readStatus => 'Estado de lectura';
|
||||||
|
@override String get all => 'Todos';
|
||||||
|
@override String get unread => 'No leídos';
|
||||||
|
@override String get read => 'Leídos';
|
||||||
@override late final _StringsBookmarksAddBookmarkEs addBookmark = _StringsBookmarksAddBookmarkEs._(_root);
|
@override late final _StringsBookmarksAddBookmarkEs addBookmark = _StringsBookmarksAddBookmarkEs._(_root);
|
||||||
@override late final _StringsBookmarksSearchEs search = _StringsBookmarksSearchEs._(_root);
|
@override late final _StringsBookmarksSearchEs search = _StringsBookmarksSearchEs._(_root);
|
||||||
@override late final _StringsBookmarksBookmarkOptionsEs bookmarkOptions = _StringsBookmarksBookmarkOptionsEs._(_root);
|
@override late final _StringsBookmarksBookmarkOptionsEs bookmarkOptions = _StringsBookmarksBookmarkOptionsEs._(_root);
|
||||||
@@ -862,6 +878,7 @@ extension on Translations {
|
|||||||
case 'generic.error': return 'Error';
|
case 'generic.error': return 'Error';
|
||||||
case 'generic.optional': return 'Optional';
|
case 'generic.optional': return 'Optional';
|
||||||
case 'generic.authTokenNotValid': return 'Your authorization token is not valid anymore. Please, reauthenticate.';
|
case 'generic.authTokenNotValid': return 'Your authorization token is not valid anymore. Please, reauthenticate.';
|
||||||
|
case 'generic.options': return 'Options';
|
||||||
case 'onboarding.title': return 'Welcome to Linkdy';
|
case 'onboarding.title': return 'Welcome to Linkdy';
|
||||||
case 'onboarding.subtitle': return 'An application to manage your bookmarks.';
|
case 'onboarding.subtitle': return 'An application to manage your bookmarks.';
|
||||||
case 'onboarding.start': return 'Start';
|
case 'onboarding.start': return 'Start';
|
||||||
@@ -899,6 +916,13 @@ extension on Translations {
|
|||||||
case 'bookmarks.dates.yesterdayAt': return ({required Object time}) => 'Yesterday, ${time}';
|
case 'bookmarks.dates.yesterdayAt': return ({required Object time}) => 'Yesterday, ${time}';
|
||||||
case 'bookmarks.shared': return 'Shared';
|
case 'bookmarks.shared': return 'Shared';
|
||||||
case 'bookmarks.archived': return 'Archived';
|
case 'bookmarks.archived': return 'Archived';
|
||||||
|
case 'bookmarks.showOnlyRead': return 'Show only read';
|
||||||
|
case 'bookmarks.showOnlyUnread': return 'Show only unread';
|
||||||
|
case 'bookmarks.showAllBookmarks': return 'Show all bookmarks';
|
||||||
|
case 'bookmarks.readStatus': return 'Read status';
|
||||||
|
case 'bookmarks.all': return 'All';
|
||||||
|
case 'bookmarks.unread': return 'Unread';
|
||||||
|
case 'bookmarks.read': return 'Read';
|
||||||
case 'bookmarks.addBookmark.addBookmark': return 'Add new bookmark';
|
case 'bookmarks.addBookmark.addBookmark': return 'Add new bookmark';
|
||||||
case 'bookmarks.addBookmark.editBookmark': return 'Edit bookmark';
|
case 'bookmarks.addBookmark.editBookmark': return 'Edit bookmark';
|
||||||
case 'bookmarks.addBookmark.bookmarkUrl': return 'Bookmark URL';
|
case 'bookmarks.addBookmark.bookmarkUrl': return 'Bookmark URL';
|
||||||
@@ -1036,6 +1060,7 @@ extension on _StringsEs {
|
|||||||
case 'generic.error': return 'Error';
|
case 'generic.error': return 'Error';
|
||||||
case 'generic.optional': return 'Opcional';
|
case 'generic.optional': return 'Opcional';
|
||||||
case 'generic.authTokenNotValid': return 'Su token de autorización ya no es válido. Por favor, vuelva a autenticarse.';
|
case 'generic.authTokenNotValid': return 'Su token de autorización ya no es válido. Por favor, vuelva a autenticarse.';
|
||||||
|
case 'generic.options': return 'Opciones';
|
||||||
case 'onboarding.title': return 'Bienvenido a Linkdy';
|
case 'onboarding.title': return 'Bienvenido a Linkdy';
|
||||||
case 'onboarding.subtitle': return 'Una aplicación para gestionar tus enlaces favoritos.';
|
case 'onboarding.subtitle': return 'Una aplicación para gestionar tus enlaces favoritos.';
|
||||||
case 'onboarding.start': return 'Comenzar';
|
case 'onboarding.start': return 'Comenzar';
|
||||||
@@ -1073,6 +1098,13 @@ extension on _StringsEs {
|
|||||||
case 'bookmarks.dates.yesterdayAt': return ({required Object time}) => 'Ayer, ${time}';
|
case 'bookmarks.dates.yesterdayAt': return ({required Object time}) => 'Ayer, ${time}';
|
||||||
case 'bookmarks.shared': return 'Compartidos';
|
case 'bookmarks.shared': return 'Compartidos';
|
||||||
case 'bookmarks.archived': return 'Archivados';
|
case 'bookmarks.archived': return 'Archivados';
|
||||||
|
case 'bookmarks.showOnlyRead': return 'Mostrar solo leídos';
|
||||||
|
case 'bookmarks.showOnlyUnread': return 'Mostrar solo no leídos';
|
||||||
|
case 'bookmarks.showAllBookmarks': return 'Mostrar todos los marcadores';
|
||||||
|
case 'bookmarks.readStatus': return 'Estado de lectura';
|
||||||
|
case 'bookmarks.all': return 'Todos';
|
||||||
|
case 'bookmarks.unread': return 'No leídos';
|
||||||
|
case 'bookmarks.read': return 'Leídos';
|
||||||
case 'bookmarks.addBookmark.addBookmark': return 'Añadir nuevo marcador';
|
case 'bookmarks.addBookmark.addBookmark': return 'Añadir nuevo marcador';
|
||||||
case 'bookmarks.addBookmark.editBookmark': return 'Editar marcador';
|
case 'bookmarks.addBookmark.editBookmark': return 'Editar marcador';
|
||||||
case 'bookmarks.addBookmark.url': return 'URL';
|
case 'bookmarks.addBookmark.url': return 'URL';
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
"close": "Close",
|
"close": "Close",
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"optional": "Optional",
|
"optional": "Optional",
|
||||||
"authTokenNotValid": "Your authorization token is not valid anymore. Please, reauthenticate."
|
"authTokenNotValid": "Your authorization token is not valid anymore. Please, reauthenticate.",
|
||||||
|
"options": "Options"
|
||||||
},
|
},
|
||||||
"onboarding": {
|
"onboarding": {
|
||||||
"title": "Welcome to Linkdy",
|
"title": "Welcome to Linkdy",
|
||||||
@@ -51,6 +52,13 @@
|
|||||||
},
|
},
|
||||||
"shared": "Shared",
|
"shared": "Shared",
|
||||||
"archived": "Archived",
|
"archived": "Archived",
|
||||||
|
"showOnlyRead": "Show only read",
|
||||||
|
"showOnlyUnread": "Show only unread",
|
||||||
|
"showAllBookmarks": "Show all bookmarks",
|
||||||
|
"readStatus": "Read status",
|
||||||
|
"all": "All",
|
||||||
|
"unread": "Unread",
|
||||||
|
"read": "Read",
|
||||||
"addBookmark": {
|
"addBookmark": {
|
||||||
"addBookmark": "Add new bookmark",
|
"addBookmark": "Add new bookmark",
|
||||||
"editBookmark": "Edit bookmark",
|
"editBookmark": "Edit bookmark",
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"optional": "Opcional",
|
"optional": "Opcional",
|
||||||
"authTokenNotValid": "Su token de autorización ya no es válido. Por favor, vuelva a autenticarse."
|
"authTokenNotValid": "Su token de autorización ya no es válido. Por favor, vuelva a autenticarse.",
|
||||||
|
"options": "Opciones"
|
||||||
},
|
},
|
||||||
"onboarding": {
|
"onboarding": {
|
||||||
"title": "Bienvenido a Linkdy",
|
"title": "Bienvenido a Linkdy",
|
||||||
@@ -51,6 +52,13 @@
|
|||||||
},
|
},
|
||||||
"shared": "Compartidos",
|
"shared": "Compartidos",
|
||||||
"archived": "Archivados",
|
"archived": "Archivados",
|
||||||
|
"showOnlyRead": "Mostrar solo leídos",
|
||||||
|
"showOnlyUnread": "Mostrar solo no leídos",
|
||||||
|
"showAllBookmarks": "Mostrar todos los marcadores",
|
||||||
|
"readStatus": "Estado de lectura",
|
||||||
|
"all": "Todos",
|
||||||
|
"unread": "No leídos",
|
||||||
|
"read": "Leídos",
|
||||||
"addBookmark": {
|
"addBookmark": {
|
||||||
"addBookmark": "Añadir nuevo marcador",
|
"addBookmark": "Añadir nuevo marcador",
|
||||||
"editBookmark": "Editar marcador",
|
"editBookmark": "Editar marcador",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class BookmarksModel {
|
|||||||
LoadStatus inialLoadStatus;
|
LoadStatus inialLoadStatus;
|
||||||
bool loadingMore;
|
bool loadingMore;
|
||||||
int maxNumber;
|
int maxNumber;
|
||||||
|
ReadStatus readStatus;
|
||||||
|
|
||||||
BookmarksModel({
|
BookmarksModel({
|
||||||
this.currentPage = 0,
|
this.currentPage = 0,
|
||||||
@@ -17,5 +18,6 @@ class BookmarksModel {
|
|||||||
this.inialLoadStatus = LoadStatus.loading,
|
this.inialLoadStatus = LoadStatus.loading,
|
||||||
this.loadingMore = false,
|
this.loadingMore = false,
|
||||||
this.maxNumber = 0,
|
this.maxNumber = 0,
|
||||||
|
this.readStatus = ReadStatus.all,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,11 @@ import 'package:linkdy/constants/enums.dart';
|
|||||||
part 'bookmarks.provider.g.dart';
|
part 'bookmarks.provider.g.dart';
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
FutureOr<void> bookmarksRequest(BookmarksRequestRef ref, int limit) async {
|
FutureOr<void> bookmarksRequest(BookmarksRequestRef ref, ReadStatus readStatus, int limit) async {
|
||||||
final result = await ref.watch(apiClientProvider)!.fetchBookmarks(
|
final result = await ref.watch(apiClientProvider)!.fetchBookmarks(
|
||||||
limit: limit,
|
limit: limit,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
|
unread: readStatus,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result.successful == true) {
|
if (result.successful == true) {
|
||||||
@@ -40,6 +41,7 @@ FutureOr<void> bookmarksRequestLoadMore(BookmarksRequestLoadMoreRef ref) async {
|
|||||||
final result = await ref.watch(apiClientProvider)!.fetchBookmarks(
|
final result = await ref.watch(apiClientProvider)!.fetchBookmarks(
|
||||||
limit: provider.limit,
|
limit: provider.limit,
|
||||||
offset: newOffset,
|
offset: newOffset,
|
||||||
|
unread: ref.read(bookmarksProvider).readStatus,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result.successful == true) {
|
if (result.successful == true) {
|
||||||
@@ -59,7 +61,7 @@ class Bookmarks extends _$Bookmarks {
|
|||||||
final model = BookmarksModel(
|
final model = BookmarksModel(
|
||||||
bookmarks: [],
|
bookmarks: [],
|
||||||
);
|
);
|
||||||
ref.read(bookmarksRequestProvider(model.limit));
|
ref.read(bookmarksRequestProvider(model.readStatus, model.limit));
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,8 +87,14 @@ class Bookmarks extends _$Bookmarks {
|
|||||||
ref.notifyListeners();
|
ref.notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setReadStatus(ReadStatus status) {
|
||||||
|
state.readStatus = status;
|
||||||
|
ref.read(bookmarksRequestProvider(status, state.limit));
|
||||||
|
ref.notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> refresh() async {
|
Future<void> refresh() async {
|
||||||
await ref.read(bookmarksRequestProvider(state.limit).future);
|
await ref.read(bookmarksRequestProvider(state.readStatus, state.limit).future);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteBookmark(Bookmark bookmark) async {
|
void deleteBookmark(Bookmark bookmark) async {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ part of 'bookmarks.provider.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$bookmarksRequestHash() => r'2da88ec52b4f959e6355f5f5fa8660d6cebd157d';
|
String _$bookmarksRequestHash() => r'eb1ddffb83edc0fa433fae76859bde4206e59940';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
@@ -40,9 +40,11 @@ class BookmarksRequestFamily extends Family<AsyncValue<void>> {
|
|||||||
|
|
||||||
/// See also [bookmarksRequest].
|
/// See also [bookmarksRequest].
|
||||||
BookmarksRequestProvider call(
|
BookmarksRequestProvider call(
|
||||||
|
ReadStatus readStatus,
|
||||||
int limit,
|
int limit,
|
||||||
) {
|
) {
|
||||||
return BookmarksRequestProvider(
|
return BookmarksRequestProvider(
|
||||||
|
readStatus,
|
||||||
limit,
|
limit,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -52,6 +54,7 @@ class BookmarksRequestFamily extends Family<AsyncValue<void>> {
|
|||||||
covariant BookmarksRequestProvider provider,
|
covariant BookmarksRequestProvider provider,
|
||||||
) {
|
) {
|
||||||
return call(
|
return call(
|
||||||
|
provider.readStatus,
|
||||||
provider.limit,
|
provider.limit,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -75,10 +78,12 @@ class BookmarksRequestFamily extends Family<AsyncValue<void>> {
|
|||||||
class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
||||||
/// See also [bookmarksRequest].
|
/// See also [bookmarksRequest].
|
||||||
BookmarksRequestProvider(
|
BookmarksRequestProvider(
|
||||||
|
ReadStatus readStatus,
|
||||||
int limit,
|
int limit,
|
||||||
) : this._internal(
|
) : this._internal(
|
||||||
(ref) => bookmarksRequest(
|
(ref) => bookmarksRequest(
|
||||||
ref as BookmarksRequestRef,
|
ref as BookmarksRequestRef,
|
||||||
|
readStatus,
|
||||||
limit,
|
limit,
|
||||||
),
|
),
|
||||||
from: bookmarksRequestProvider,
|
from: bookmarksRequestProvider,
|
||||||
@@ -90,6 +95,7 @@ class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
|||||||
dependencies: BookmarksRequestFamily._dependencies,
|
dependencies: BookmarksRequestFamily._dependencies,
|
||||||
allTransitiveDependencies:
|
allTransitiveDependencies:
|
||||||
BookmarksRequestFamily._allTransitiveDependencies,
|
BookmarksRequestFamily._allTransitiveDependencies,
|
||||||
|
readStatus: readStatus,
|
||||||
limit: limit,
|
limit: limit,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -100,9 +106,11 @@ class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
|||||||
required super.allTransitiveDependencies,
|
required super.allTransitiveDependencies,
|
||||||
required super.debugGetCreateSourceHash,
|
required super.debugGetCreateSourceHash,
|
||||||
required super.from,
|
required super.from,
|
||||||
|
required this.readStatus,
|
||||||
required this.limit,
|
required this.limit,
|
||||||
}) : super.internal();
|
}) : super.internal();
|
||||||
|
|
||||||
|
final ReadStatus readStatus;
|
||||||
final int limit;
|
final int limit;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -118,6 +126,7 @@ class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
|||||||
dependencies: null,
|
dependencies: null,
|
||||||
allTransitiveDependencies: null,
|
allTransitiveDependencies: null,
|
||||||
debugGetCreateSourceHash: null,
|
debugGetCreateSourceHash: null,
|
||||||
|
readStatus: readStatus,
|
||||||
limit: limit,
|
limit: limit,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -130,12 +139,15 @@ class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is BookmarksRequestProvider && other.limit == limit;
|
return other is BookmarksRequestProvider &&
|
||||||
|
other.readStatus == readStatus &&
|
||||||
|
other.limit == limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||||
|
hash = _SystemHash.combine(hash, readStatus.hashCode);
|
||||||
hash = _SystemHash.combine(hash, limit.hashCode);
|
hash = _SystemHash.combine(hash, limit.hashCode);
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
return _SystemHash.finish(hash);
|
||||||
@@ -143,6 +155,9 @@ class BookmarksRequestProvider extends AutoDisposeFutureProvider<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mixin BookmarksRequestRef on AutoDisposeFutureProviderRef<void> {
|
mixin BookmarksRequestRef on AutoDisposeFutureProviderRef<void> {
|
||||||
|
/// The parameter `readStatus` of this provider.
|
||||||
|
ReadStatus get readStatus;
|
||||||
|
|
||||||
/// The parameter `limit` of this provider.
|
/// The parameter `limit` of this provider.
|
||||||
int get limit;
|
int get limit;
|
||||||
}
|
}
|
||||||
@@ -151,12 +166,14 @@ class _BookmarksRequestProviderElement
|
|||||||
extends AutoDisposeFutureProviderElement<void> with BookmarksRequestRef {
|
extends AutoDisposeFutureProviderElement<void> with BookmarksRequestRef {
|
||||||
_BookmarksRequestProviderElement(super.provider);
|
_BookmarksRequestProviderElement(super.provider);
|
||||||
|
|
||||||
|
@override
|
||||||
|
ReadStatus get readStatus => (origin as BookmarksRequestProvider).readStatus;
|
||||||
@override
|
@override
|
||||||
int get limit => (origin as BookmarksRequestProvider).limit;
|
int get limit => (origin as BookmarksRequestProvider).limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
String _$bookmarksRequestLoadMoreHash() =>
|
String _$bookmarksRequestLoadMoreHash() =>
|
||||||
r'36b0703684218e1c6bf01643788d5f9d3da32327';
|
r'1a206bd974677fd862eb4d5b5f453df9f566d995';
|
||||||
|
|
||||||
/// See also [bookmarksRequestLoadMore].
|
/// See also [bookmarksRequestLoadMore].
|
||||||
@ProviderFor(bookmarksRequestLoadMore)
|
@ProviderFor(bookmarksRequestLoadMore)
|
||||||
@@ -172,7 +189,7 @@ final bookmarksRequestLoadMoreProvider =
|
|||||||
);
|
);
|
||||||
|
|
||||||
typedef BookmarksRequestLoadMoreRef = AutoDisposeFutureProviderRef<void>;
|
typedef BookmarksRequestLoadMoreRef = AutoDisposeFutureProviderRef<void>;
|
||||||
String _$bookmarksHash() => r'602a50d02cde9a67335372659f8e2f656ac21995';
|
String _$bookmarksHash() => r'0a1d73459b3c148ba31655347364ee3a9e70b68a';
|
||||||
|
|
||||||
/// See also [Bookmarks].
|
/// See also [Bookmarks].
|
||||||
@ProviderFor(Bookmarks)
|
@ProviderFor(Bookmarks)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ part of 'favicon_loader.provider.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$faviconStoreHash() => r'aeda388d2c7d220a43a29825a9850d8d7433d84f';
|
String _$faviconStoreHash() => r'459949315bf6a236946c8b03ba90ce047b691b7e';
|
||||||
|
|
||||||
/// See also [FaviconStore].
|
/// See also [FaviconStore].
|
||||||
@ProviderFor(FaviconStore)
|
@ProviderFor(FaviconStore)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||||
|
import 'package:quds_popup_menu/quds_popup_menu.dart';
|
||||||
|
|
||||||
import 'package:linkdy/screens/bookmarks/provider/bookmarks.provider.dart';
|
import 'package:linkdy/screens/bookmarks/provider/bookmarks.provider.dart';
|
||||||
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
|
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
|
||||||
@@ -50,6 +51,22 @@ class BookmarksScreen extends ConsumerWidget {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String readStatus() {
|
||||||
|
switch (bookmarks.readStatus) {
|
||||||
|
case ReadStatus.all:
|
||||||
|
return t.bookmarks.all;
|
||||||
|
|
||||||
|
case ReadStatus.unread:
|
||||||
|
return t.bookmarks.unread;
|
||||||
|
|
||||||
|
case ReadStatus.read:
|
||||||
|
return t.bookmarks.read;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ScaffoldMessenger(
|
return ScaffoldMessenger(
|
||||||
key: ScaffoldMessengerKeys.bookmarks,
|
key: ScaffoldMessengerKeys.bookmarks,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
@@ -62,7 +79,44 @@ class BookmarksScreen extends ConsumerWidget {
|
|||||||
floating: true,
|
floating: true,
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
forceElevated: innerBoxIsScrolled,
|
forceElevated: innerBoxIsScrolled,
|
||||||
title: Text(t.bookmarks.bookmarks),
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(t.bookmarks.bookmarks),
|
||||||
|
if (bookmarks.readStatus == ReadStatus.read || bookmarks.readStatus == ReadStatus.unread)
|
||||||
|
Container(
|
||||||
|
margin: const EdgeInsets.only(left: 8),
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 8,
|
||||||
|
vertical: 4,
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
|
color: Theme.of(context).colorScheme.primaryContainer,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
bookmarks.readStatus == ReadStatus.read
|
||||||
|
? Icons.mark_email_read_rounded
|
||||||
|
: Icons.mark_as_unread_rounded,
|
||||||
|
size: 14,
|
||||||
|
color: Theme.of(context).colorScheme.onPrimaryContainer,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 4),
|
||||||
|
Text(
|
||||||
|
bookmarks.readStatus == ReadStatus.read ? t.bookmarks.read : t.bookmarks.unread,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
color: Theme.of(context).colorScheme.onPrimaryContainer,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
key: _searchButtonKey,
|
key: _searchButtonKey,
|
||||||
@@ -70,31 +124,76 @@ class BookmarksScreen extends ConsumerWidget {
|
|||||||
icon: const Icon(Icons.search_rounded),
|
icon: const Icon(Icons.search_rounded),
|
||||||
tooltip: t.bookmarks.search.searchBookmarks,
|
tooltip: t.bookmarks.search.searchBookmarks,
|
||||||
),
|
),
|
||||||
PopupMenuButton(
|
const SizedBox(width: 8),
|
||||||
itemBuilder: (context) => [
|
QudsPopupButton(
|
||||||
PopupMenuItem(
|
radius: 22,
|
||||||
onTap: () => ref.read(routerProvider).push(RoutesPaths.archivedBookmarks),
|
backgroundColor: Theme.of(context).popupMenuTheme.surfaceTintColor,
|
||||||
child: Row(
|
items: [
|
||||||
children: [
|
QudsPopupMenuItem(
|
||||||
const Icon(Icons.archive_rounded),
|
leading: const Icon(Icons.archive_rounded),
|
||||||
const SizedBox(width: 16),
|
title: Text(t.bookmarks.archived),
|
||||||
Text(t.bookmarks.archived),
|
onPressed: () => ref.read(routerProvider).push(RoutesPaths.archivedBookmarks),
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
PopupMenuItem(
|
QudsPopupMenuItem(
|
||||||
onTap: () => ref.read(routerProvider).push(RoutesPaths.sharedBookmarks),
|
leading: const Icon(Icons.share_rounded),
|
||||||
child: Row(
|
title: Text(t.bookmarks.shared),
|
||||||
children: [
|
onPressed: () => ref.read(routerProvider).push(RoutesPaths.sharedBookmarks),
|
||||||
const Icon(Icons.share_rounded),
|
),
|
||||||
const SizedBox(width: 16),
|
QudsPopupMenuDivider(),
|
||||||
Text(t.bookmarks.shared),
|
QudsPopupMenuSection(
|
||||||
],
|
leading: const Icon(Icons.list_rounded),
|
||||||
),
|
titleText: t.bookmarks.readStatus,
|
||||||
|
subTitle: Text(readStatus()),
|
||||||
|
subItems: [
|
||||||
|
QudsPopupMenuItem(
|
||||||
|
leading: const Icon(Icons.list_rounded),
|
||||||
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Flexible(child: Text(t.bookmarks.showAllBookmarks)),
|
||||||
|
if (bookmarks.readStatus == ReadStatus.all) ...[
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
const Icon(Icons.check_rounded),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
),
|
||||||
|
onPressed: () => ref.read(bookmarksProvider.notifier).setReadStatus(ReadStatus.all),
|
||||||
|
),
|
||||||
|
QudsPopupMenuItem(
|
||||||
|
leading: const Icon(Icons.mark_as_unread_rounded),
|
||||||
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Flexible(child: Text(t.bookmarks.showOnlyUnread)),
|
||||||
|
if (bookmarks.readStatus == ReadStatus.unread) ...[
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
const Icon(Icons.check_rounded),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
),
|
||||||
|
onPressed: () => ref.read(bookmarksProvider.notifier).setReadStatus(ReadStatus.unread),
|
||||||
|
),
|
||||||
|
QudsPopupMenuItem(
|
||||||
|
leading: const Icon(Icons.mark_email_read_rounded),
|
||||||
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Flexible(child: Text(t.bookmarks.showOnlyRead)),
|
||||||
|
if (bookmarks.readStatus == ReadStatus.read) ...[
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
const Icon(Icons.check_rounded),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
),
|
||||||
|
onPressed: () => ref.read(bookmarksProvider.notifier).setReadStatus(ReadStatus.read),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
tooltip: t.generic.options,
|
||||||
|
child: const Icon(Icons.more_vert_rounded),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 16),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -47,7 +47,12 @@ class ApiClientService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<ApiResponse<BookmarksResponse>> fetchBookmarks({String? q, int? limit, int? offset}) async {
|
Future<ApiResponse<BookmarksResponse>> fetchBookmarks({
|
||||||
|
String? q,
|
||||||
|
int? limit,
|
||||||
|
int? offset,
|
||||||
|
ReadStatus? unread,
|
||||||
|
}) async {
|
||||||
try {
|
try {
|
||||||
final response = await dioInstance.get(
|
final response = await dioInstance.get(
|
||||||
"/bookmarks/",
|
"/bookmarks/",
|
||||||
@@ -55,6 +60,11 @@ class ApiClientService {
|
|||||||
"q": q,
|
"q": q,
|
||||||
"limit": limit,
|
"limit": limit,
|
||||||
"offset": offset,
|
"offset": offset,
|
||||||
|
"unread": unread == ReadStatus.unread
|
||||||
|
? "yes"
|
||||||
|
: unread == ReadStatus.read
|
||||||
|
? "no"
|
||||||
|
: null,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
return ApiResponse(
|
return ApiResponse(
|
||||||
|
|||||||
16
pubspec.lock
16
pubspec.lock
@@ -853,6 +853,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.3"
|
version: "1.2.3"
|
||||||
|
quds_popup_menu:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: quds_popup_menu
|
||||||
|
sha256: d0f3f2f84c0bbf2934b961abbdafaa112c7ff9057585a24526a1ef61d2cd79e7
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.0.1+1"
|
||||||
|
quds_ui_kit:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: quds_ui_kit
|
||||||
|
sha256: "12018041085bf3f6bdb30744ba86cdb4b3a8e7d51dc2b271f275885508dd21f4"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.0.7+10"
|
||||||
riverpod:
|
riverpod:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ dependencies:
|
|||||||
skeletonizer: ^1.0.1
|
skeletonizer: ^1.0.1
|
||||||
http: ^1.2.0
|
http: ^1.2.0
|
||||||
flutter_slidable: ^3.0.1
|
flutter_slidable: ^3.0.1
|
||||||
|
quds_popup_menu: ^0.0.1+1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
build_runner: ^2.4.8
|
build_runner: ^2.4.8
|
||||||
|
|||||||
Reference in New Issue
Block a user