diff --git a/lib/src/constants/enum.dart b/lib/src/constants/enum.dart index cdc59366..5c71e2e6 100644 --- a/lib/src/constants/enum.dart +++ b/lib/src/constants/enum.dart @@ -102,6 +102,7 @@ enum MangaSort { enum ChapterSort { source, + uploadDate, fetchedDate; String toLocale(BuildContext context) { @@ -110,6 +111,8 @@ enum ChapterSort { return context.l10n!.chapterSortSource; case ChapterSort.fetchedDate: return context.l10n!.chapterSortFetchedDate; + case ChapterSort.uploadDate: + return context.l10n!.chapterSortUploadDate; } } } diff --git a/lib/src/features/library/presentation/library/controller/library_controller.dart b/lib/src/features/library/presentation/library/controller/library_controller.dart index 0ac60dba..c22a0f74 100644 --- a/lib/src/features/library/presentation/library/controller/library_controller.dart +++ b/lib/src/features/library/presentation/library/controller/library_controller.dart @@ -47,7 +47,8 @@ class CategoryMangaListWithQueryAndFilter final mangaFilterDownloaded = ref.watch(libraryMangaFilterDownloadedProvider); final mangaFilterCompleted = ref.watch(libraryMangaFilterCompletedProvider); - final sortedBy = ref.watch(libraryMangaSortProvider); + final MangaSort sortedBy = + ref.watch(libraryMangaSortProvider) ?? DBKeys.mangaSort.initial; final sortedDirection = ref.watch(libraryMangaSortDirectionProvider).ifNull(true); @@ -89,8 +90,6 @@ class CategoryMangaListWithQueryAndFilter case MangaSort.lastRead: return (m2.lastReadAt ?? 0).compareTo(m1.lastReadAt ?? 0) * sortDirToggle; - default: - return 0; } } diff --git a/lib/src/features/library/presentation/library/controller/library_controller.g.dart b/lib/src/features/library/presentation/library/controller/library_controller.g.dart index 4fd201aa..57c05612 100644 --- a/lib/src/features/library/presentation/library/controller/library_controller.g.dart +++ b/lib/src/features/library/presentation/library/controller/library_controller.g.dart @@ -112,7 +112,7 @@ class CategoryMangaListProvider } String _$categoryMangaListWithQueryAndFilterHash() => - r'c7c4c6d4717fa47e57d0ada372d733ab30caa986'; + r'a6eb84f3b6a265358662794d788606abf7ef4af5'; abstract class _$CategoryMangaListWithQueryAndFilter extends BuildlessAutoDisposeNotifier?>> { diff --git a/lib/src/features/manga_book/domain/manga/manga_model.dart b/lib/src/features/manga_book/domain/manga/manga_model.dart index c8b6d34f..cc38fd9f 100644 --- a/lib/src/features/manga_book/domain/manga/manga_model.dart +++ b/lib/src/features/manga_book/domain/manga/manga_model.dart @@ -35,6 +35,7 @@ class Manga with _$Manga { @JsonKey(fromJson: MangaStatus.fromJson, toJson: MangaStatus.toJson) MangaStatus? status, String? thumbnailUrl, + int? thumbnailUrlLastFetched, String? title, int? unreadCount, int? lastFetchedAt, diff --git a/lib/src/features/manga_book/domain/manga/manga_model.freezed.dart b/lib/src/features/manga_book/domain/manga/manga_model.freezed.dart index 9a44e15a..a6d61e8b 100644 --- a/lib/src/features/manga_book/domain/manga/manga_model.freezed.dart +++ b/lib/src/features/manga_book/domain/manga/manga_model.freezed.dart @@ -39,6 +39,7 @@ mixin _$Manga { @JsonKey(fromJson: MangaStatus.fromJson, toJson: MangaStatus.toJson) MangaStatus? get status => throw _privateConstructorUsedError; String? get thumbnailUrl => throw _privateConstructorUsedError; + int? get thumbnailUrlLastFetched => throw _privateConstructorUsedError; String? get title => throw _privateConstructorUsedError; int? get unreadCount => throw _privateConstructorUsedError; int? get lastFetchedAt => throw _privateConstructorUsedError; @@ -76,6 +77,7 @@ abstract class $MangaCopyWith<$Res> { @JsonKey(fromJson: MangaStatus.fromJson, toJson: MangaStatus.toJson) MangaStatus? status, String? thumbnailUrl, + int? thumbnailUrlLastFetched, String? title, int? unreadCount, int? lastFetchedAt, @@ -119,6 +121,7 @@ class _$MangaCopyWithImpl<$Res, $Val extends Manga> Object? sourceId = freezed, Object? status = freezed, Object? thumbnailUrl = freezed, + Object? thumbnailUrlLastFetched = freezed, Object? title = freezed, Object? unreadCount = freezed, Object? lastFetchedAt = freezed, @@ -199,6 +202,10 @@ class _$MangaCopyWithImpl<$Res, $Val extends Manga> ? _value.thumbnailUrl : thumbnailUrl // ignore: cast_nullable_to_non_nullable as String?, + thumbnailUrlLastFetched: freezed == thumbnailUrlLastFetched + ? _value.thumbnailUrlLastFetched + : thumbnailUrlLastFetched // ignore: cast_nullable_to_non_nullable + as int?, title: freezed == title ? _value.title : title // ignore: cast_nullable_to_non_nullable @@ -289,6 +296,7 @@ abstract class _$$_MangaCopyWith<$Res> implements $MangaCopyWith<$Res> { @JsonKey(fromJson: MangaStatus.fromJson, toJson: MangaStatus.toJson) MangaStatus? status, String? thumbnailUrl, + int? thumbnailUrlLastFetched, String? title, int? unreadCount, int? lastFetchedAt, @@ -331,6 +339,7 @@ class __$$_MangaCopyWithImpl<$Res> extends _$MangaCopyWithImpl<$Res, _$_Manga> Object? sourceId = freezed, Object? status = freezed, Object? thumbnailUrl = freezed, + Object? thumbnailUrlLastFetched = freezed, Object? title = freezed, Object? unreadCount = freezed, Object? lastFetchedAt = freezed, @@ -411,6 +420,10 @@ class __$$_MangaCopyWithImpl<$Res> extends _$MangaCopyWithImpl<$Res, _$_Manga> ? _value.thumbnailUrl : thumbnailUrl // ignore: cast_nullable_to_non_nullable as String?, + thumbnailUrlLastFetched: freezed == thumbnailUrlLastFetched + ? _value.thumbnailUrlLastFetched + : thumbnailUrlLastFetched // ignore: cast_nullable_to_non_nullable + as int?, title: freezed == title ? _value.title : title // ignore: cast_nullable_to_non_nullable @@ -462,6 +475,7 @@ class _$_Manga implements _Manga { @JsonKey(fromJson: MangaStatus.fromJson, toJson: MangaStatus.toJson) this.status, this.thumbnailUrl, + this.thumbnailUrlLastFetched, this.title, this.unreadCount, this.lastFetchedAt, @@ -519,6 +533,8 @@ class _$_Manga implements _Manga { @override final String? thumbnailUrl; @override + final int? thumbnailUrlLastFetched; + @override final String? title; @override final int? unreadCount; @@ -533,7 +549,7 @@ class _$_Manga implements _Manga { @override String toString() { - return 'Manga(artist: $artist, author: $author, description: $description, downloadCount: $downloadCount, chapterCount: $chapterCount, lastReadAt: $lastReadAt, lastChapterRead: $lastChapterRead, freshData: $freshData, genre: $genre, inLibrary: $inLibrary, id: $id, inLibraryAt: $inLibraryAt, initialized: $initialized, realUrl: $realUrl, source: $source, sourceId: $sourceId, status: $status, thumbnailUrl: $thumbnailUrl, title: $title, unreadCount: $unreadCount, lastFetchedAt: $lastFetchedAt, chaptersLastFetchedAt: $chaptersLastFetchedAt, url: $url, meta: $meta)'; + return 'Manga(artist: $artist, author: $author, description: $description, downloadCount: $downloadCount, chapterCount: $chapterCount, lastReadAt: $lastReadAt, lastChapterRead: $lastChapterRead, freshData: $freshData, genre: $genre, inLibrary: $inLibrary, id: $id, inLibraryAt: $inLibraryAt, initialized: $initialized, realUrl: $realUrl, source: $source, sourceId: $sourceId, status: $status, thumbnailUrl: $thumbnailUrl, thumbnailUrlLastFetched: $thumbnailUrlLastFetched, title: $title, unreadCount: $unreadCount, lastFetchedAt: $lastFetchedAt, chaptersLastFetchedAt: $chaptersLastFetchedAt, url: $url, meta: $meta)'; } @override @@ -570,6 +586,9 @@ class _$_Manga implements _Manga { (identical(other.status, status) || other.status == status) && (identical(other.thumbnailUrl, thumbnailUrl) || other.thumbnailUrl == thumbnailUrl) && + (identical( + other.thumbnailUrlLastFetched, thumbnailUrlLastFetched) || + other.thumbnailUrlLastFetched == thumbnailUrlLastFetched) && (identical(other.title, title) || other.title == title) && (identical(other.unreadCount, unreadCount) || other.unreadCount == unreadCount) && @@ -603,6 +622,7 @@ class _$_Manga implements _Manga { sourceId, status, thumbnailUrl, + thumbnailUrlLastFetched, title, unreadCount, lastFetchedAt, @@ -646,6 +666,7 @@ abstract class _Manga implements Manga { @JsonKey(fromJson: MangaStatus.fromJson, toJson: MangaStatus.toJson) final MangaStatus? status, final String? thumbnailUrl, + final int? thumbnailUrlLastFetched, final String? title, final int? unreadCount, final int? lastFetchedAt, @@ -693,6 +714,8 @@ abstract class _Manga implements Manga { @override String? get thumbnailUrl; @override + int? get thumbnailUrlLastFetched; + @override String? get title; @override int? get unreadCount; diff --git a/lib/src/features/manga_book/domain/manga/manga_model.g.dart b/lib/src/features/manga_book/domain/manga/manga_model.g.dart index 677bdf09..af3d503a 100644 --- a/lib/src/features/manga_book/domain/manga/manga_model.g.dart +++ b/lib/src/features/manga_book/domain/manga/manga_model.g.dart @@ -30,6 +30,7 @@ _$_Manga _$$_MangaFromJson(Map json) => _$_Manga( sourceId: json['sourceId'] as String?, status: MangaStatus.fromJson(json['status'] as String), thumbnailUrl: json['thumbnailUrl'] as String?, + thumbnailUrlLastFetched: json['thumbnailUrlLastFetched'] as int?, title: json['title'] as String?, unreadCount: json['unreadCount'] as int?, lastFetchedAt: json['lastFetchedAt'] as int?, @@ -59,6 +60,7 @@ Map _$$_MangaToJson(_$_Manga instance) => { 'sourceId': instance.sourceId, 'status': MangaStatus.toJson(instance.status), 'thumbnailUrl': instance.thumbnailUrl, + 'thumbnailUrlLastFetched': instance.thumbnailUrlLastFetched, 'title': instance.title, 'unreadCount': instance.unreadCount, 'lastFetchedAt': instance.lastFetchedAt, diff --git a/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.dart b/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.dart index fb75940e..7a1469c8 100644 --- a/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.dart +++ b/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.dart @@ -97,7 +97,8 @@ AsyncValue?> mangaChapterListWithFilter( final chapterFilterDownloaded = ref.watch(mangaChapterFilterDownloadedProvider); final chapterFilterBookmark = ref.watch(mangaChapterFilterBookmarkedProvider); - final sortedBy = ref.watch(mangaChapterSortProvider); + final ChapterSort sortedBy = ref.watch(mangaChapterSortProvider) ?? + DBKeys.chapterSortDirection.initial; final sortedDirection = ref.watch(mangaChapterSortDirectionProvider).ifNull(true); @@ -126,8 +127,9 @@ AsyncValue?> mangaChapterListWithFilter( return (m1.fetchedAt ?? 0).compareTo(m2.fetchedAt ?? 0) * sortDirToggle; case ChapterSort.source: return (m1.index ?? 0).compareTo(m2.index ?? 0) * sortDirToggle; - default: - return 0; + case ChapterSort.uploadDate: + return (m1.uploadDate ?? 0).compareTo(m2.uploadDate ?? 0) * + sortDirToggle; } } diff --git a/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.g.dart b/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.g.dart index 5b3bb09e..f9313021 100644 --- a/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.g.dart +++ b/lib/src/features/manga_book/presentation/manga_details/controller/manga_details_controller.g.dart @@ -7,7 +7,7 @@ part of 'manga_details_controller.dart'; // ************************************************************************** String _$mangaChapterListWithFilterHash() => - r'c38f5462d03c80c543f83d2f6910fd7ecc0e1436'; + r'f5082f1f063ab87e9bc05b65dc8f9bdf7913e901'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/src/features/manga_book/presentation/manga_details/widgets/manga_chapter_sort.dart b/lib/src/features/manga_book/presentation/manga_details/widgets/manga_chapter_sort.dart index 063f394e..a536a43e 100644 --- a/lib/src/features/manga_book/presentation/manga_details/widgets/manga_chapter_sort.dart +++ b/lib/src/features/manga_book/presentation/manga_details/widgets/manga_chapter_sort.dart @@ -17,10 +17,10 @@ class MangaChapterSort extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { return ListView( - children: const [ - Divider(height: .5), - MangaChapterSortTile(sortType: ChapterSort.source), - MangaChapterSortTile(sortType: ChapterSort.fetchedDate), + children: [ + const Divider(height: .5), + for (ChapterSort chapterSort in ChapterSort.values) + MangaChapterSortTile(sortType: chapterSort), ], ); } diff --git a/lib/src/features/manga_book/presentation/reader/widgets/reader_wrapper.dart b/lib/src/features/manga_book/presentation/reader/widgets/reader_wrapper.dart index e7c2d023..62f0d8c0 100644 --- a/lib/src/features/manga_book/presentation/reader/widgets/reader_wrapper.dart +++ b/lib/src/features/manga_book/presentation/reader/widgets/reader_wrapper.dart @@ -34,8 +34,12 @@ import 'reader_navigation_layout/reader_navigation_layout.dart'; class NextScrollIntent extends Intent {} +class NextChapterIntent extends Intent {} + class PreviousScrollIntent extends Intent {} +class PreviousChapterIntent extends Intent {} + class ReaderWrapper extends HookConsumerWidget { const ReaderWrapper({ super.key, @@ -56,6 +60,7 @@ class ReaderWrapper extends HookConsumerWidget { final VoidCallback onNext; final int currentIndex; final Axis scrollDirection; + @override Widget build(BuildContext context, WidgetRef ref) { final prevNextChapterPair = ref.watch( @@ -131,60 +136,6 @@ class ReaderWrapper extends HookConsumerWidget { [mangaReaderNavigationLayout], ); - final quickSettings = Column( - mainAxisSize: MainAxisSize.min, - children: [ - ListTile( - leading: const Icon(Icons.app_settings_alt_outlined), - title: Text(context.l10n!.readerMode), - subtitle: Text(mangaReaderMode.toLocale(context)), - onTap: () { - context.pop(); - showReaderModePopup(); - }, - ), - ListTile( - leading: const Icon( - Icons.touch_app_rounded, - ), - title: Text( - context.l10n!.readerNavigationLayout, - ), - subtitle: Text(mangaReaderNavigationLayout.toLocale(context)), - onTap: () { - context.pop(); - showReaderNavigationLayoutPopup(); - }, - ), - AsyncReaderPaddingSlider( - readerPadding: mangaReaderPadding, - onChanged: (value) { - AsyncValue.guard( - () => ref.read(mangaBookRepositoryProvider).patchMangaMeta( - mangaId: "${manga.id}", - key: MangaMetaKeys.readerPadding.key, - value: value, - ), - ); - ref.invalidate(mangaWithIdProvider(mangaId: "${manga.id}")); - }, - ), - AsyncReaderMagnifierSizeSlider( - readerMagnifierSize: mangaReaderMagnifierSize, - onChanged: (value) { - AsyncValue.guard( - () => ref.read(mangaBookRepositoryProvider).patchMangaMeta( - mangaId: "${manga.id}", - key: MangaMetaKeys.readerMagnifierSize.key, - value: value, - ), - ); - ref.invalidate(mangaWithIdProvider(mangaId: "${manga.id}")); - }, - ), - ], - ); - return Theme( data: context.theme.copyWith( bottomSheetTheme: const BottomSheetThemeData( @@ -230,7 +181,64 @@ class ReaderWrapper extends HookConsumerWidget { extendBodyBehindAppBar: true, extendBody: true, endDrawerEnableOpenDragGesture: false, - endDrawer: Drawer(width: kDrawerWidth, child: quickSettings), + endDrawer: Drawer( + width: kDrawerWidth, + shape: const RoundedRectangleBorder(), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + AppBar( + backgroundColor: Colors.transparent, + actions: const [SizedBox.shrink()], + ), + ListTile( + leading: const Icon(Icons.app_settings_alt_outlined), + title: Text(context.l10n!.readerMode), + subtitle: Text(mangaReaderMode.toLocale(context)), + onTap: () { + context.pop(); + showReaderModePopup(); + }, + ), + ListTile( + leading: const Icon(Icons.touch_app_rounded), + title: Text(context.l10n!.readerNavigationLayout), + subtitle: Text(mangaReaderNavigationLayout.toLocale(context)), + onTap: () { + context.pop(); + showReaderNavigationLayoutPopup(); + }, + ), + AsyncReaderPaddingSlider( + readerPadding: mangaReaderPadding, + onChanged: (value) { + AsyncValue.guard( + () => ref.read(mangaBookRepositoryProvider).patchMangaMeta( + mangaId: "${manga.id}", + key: MangaMetaKeys.readerPadding.key, + value: value, + ), + ); + ref.invalidate(mangaWithIdProvider(mangaId: "${manga.id}")); + }, + ), + AsyncReaderMagnifierSizeSlider( + readerMagnifierSize: mangaReaderMagnifierSize, + onChanged: (value) { + AsyncValue.guard( + () => ref.read(mangaBookRepositoryProvider).patchMangaMeta( + mangaId: "${manga.id}", + key: MangaMetaKeys.readerMagnifierSize.key, + value: value, + ), + ); + ref.invalidate(mangaWithIdProvider(mangaId: "${manga.id}")); + }, + ), + ], + ), + ), bottomSheet: visibility.value ? ExcludeFocus( child: Column( @@ -312,18 +320,8 @@ class ReaderWrapper extends HookConsumerWidget { ), Builder(builder: (context) { return IconButton( - onPressed: () { - if (context.isTablet) { - Scaffold.of(context).openEndDrawer(); - } else { - showModalBottomSheet( - context: context, - backgroundColor: context.theme.cardColor, - clipBehavior: Clip.hardEdge, - builder: (context) => quickSettings, - ); - } - }, + onPressed: () => + Scaffold.of(context).openEndDrawer(), icon: const Icon(Icons.settings_rounded), ); }), @@ -337,19 +335,37 @@ class ReaderWrapper extends HookConsumerWidget { body: Shortcuts( shortcuts: { const SingleActivator(LogicalKeyboardKey.arrowLeft): - PreviousScrollIntent(), + scrollDirection == Axis.horizontal + ? PreviousScrollIntent() + : PreviousChapterIntent(), + const SingleActivator(LogicalKeyboardKey.keyA): + scrollDirection == Axis.horizontal + ? PreviousScrollIntent() + : PreviousChapterIntent(), const SingleActivator(LogicalKeyboardKey.arrowRight): - NextScrollIntent(), + scrollDirection == Axis.horizontal + ? NextScrollIntent() + : NextChapterIntent(), + const SingleActivator(LogicalKeyboardKey.keyD): + scrollDirection == Axis.horizontal + ? NextScrollIntent() + : NextChapterIntent(), const SingleActivator(LogicalKeyboardKey.arrowUp): - PreviousScrollIntent(), - const SingleActivator(LogicalKeyboardKey.arrowDown): - NextScrollIntent(), + scrollDirection == Axis.vertical + ? PreviousScrollIntent() + : PreviousChapterIntent(), const SingleActivator(LogicalKeyboardKey.keyW): - PreviousScrollIntent(), - const SingleActivator(LogicalKeyboardKey.keyS): NextScrollIntent(), - const SingleActivator(LogicalKeyboardKey.keyA): - PreviousScrollIntent(), - const SingleActivator(LogicalKeyboardKey.keyD): NextScrollIntent(), + scrollDirection == Axis.vertical + ? PreviousScrollIntent() + : PreviousChapterIntent(), + const SingleActivator(LogicalKeyboardKey.arrowDown): + scrollDirection == Axis.vertical + ? NextScrollIntent() + : NextChapterIntent(), + const SingleActivator(LogicalKeyboardKey.keyS): + scrollDirection == Axis.vertical + ? NextScrollIntent() + : NextChapterIntent(), }, child: Actions( actions: { @@ -359,6 +375,26 @@ class ReaderWrapper extends HookConsumerWidget { NextScrollIntent: CallbackAction( onInvoke: (intent) => onNext(), ), + PreviousChapterIntent: CallbackAction( + onInvoke: (intent) => prevNextChapterPair?.second != null + ? context.pushReplacement( + Routes.getReader( + "${prevNextChapterPair!.second!.mangaId}", + "${prevNextChapterPair.second!.index}", + ), + ) + : onPrevious(), + ), + NextChapterIntent: CallbackAction( + onInvoke: (intent) => prevNextChapterPair?.first != null + ? context.pushReplacement( + Routes.getReader( + "${prevNextChapterPair!.first!.mangaId}", + "${prevNextChapterPair.first!.index}", + ), + ) + : onNext(), + ), }, child: Focus( autofocus: true, diff --git a/lib/src/features/manga_book/widgets/update_status_fab.dart b/lib/src/features/manga_book/widgets/update_status_fab.dart index 2ae70583..2bc54c24 100644 --- a/lib/src/features/manga_book/widgets/update_status_fab.dart +++ b/lib/src/features/manga_book/widgets/update_status_fab.dart @@ -20,7 +20,6 @@ class UpdateStatusFab extends ConsumerWidget { final updateStatus = ref.watch(updatesSocketProvider); final showStatus = (updateStatus.valueOrNull?.showUpdateStatus).ifNull(); return FloatingActionButton.extended( - isExtended: context.isTablet, icon: showStatus ? null : const Icon(Icons.refresh), onPressed: () => showStatus ? showUpdateStatusSummaryBottomSheet(context) diff --git a/lib/src/features/manga_book/widgets/update_status_summary_sheet.dart b/lib/src/features/manga_book/widgets/update_status_summary_sheet.dart index f66173da..b63a6c18 100644 --- a/lib/src/features/manga_book/widgets/update_status_summary_sheet.dart +++ b/lib/src/features/manga_book/widgets/update_status_summary_sheet.dart @@ -91,7 +91,7 @@ class UpdateStatusExpansionTile extends StatelessWidget { @override Widget build(BuildContext context) { return ExpansionTile( - title: Text(title), + title: Text("$title (${mangas.length.padLeft()})"), initiallyExpanded: initiallyExpanded, textColor: context.theme.indicatorColor, iconColor: context.theme.indicatorColor, diff --git a/lib/src/l10n/app_en.arb b/lib/src/l10n/app_en.arb index 7867c0f8..c1d23e27 100644 --- a/lib/src/l10n/app_en.arb +++ b/lib/src/l10n/app_en.arb @@ -72,6 +72,9 @@ "@chapterSortSource": { "description": "Radio button text for sort by Source" }, + "@chapterSortUploadDate": { + "description": "Radio button text for sort by Upload Date" + }, "@checkForServerUpdates": { "description": "Button text to check for Server updates" }, @@ -612,6 +615,7 @@ "chapterNumber": "Chapter {number}", "chapterSortFetchedDate": "By Fetched Data", "chapterSortSource": "By Source", + "chapterSortUploadDate": "By Upload Date", "checkForServerUpdates": "Check for Server updates", "checkForUpdates": "Check for updates", "client": "Client", diff --git a/pubspec.lock b/pubspec.lock index 71c7c7cb..1bcf0aa8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201" + sha256: "98d1d33ed129b372846e862de23a0fc365745f4d7b5e786ce667fcbbb7ac5c07" url: "https://pub.dev" source: hosted - version: "52.0.0" + version: "55.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4 + sha256: "881348aed9b0b425882c97732629a6a31093c8ff20fc4b3b03fb9d3d50a3a126" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.7.1" analyzer_plugin: dependency: transitive description: @@ -245,26 +245,26 @@ packages: dependency: transitive description: name: custom_lint - sha256: "324e7026902f34e180d8d27e08a89dbbe3dd8a54e0c3852a0df0db0f4046120b" + sha256: "32648ef4f1dda618d98a22bc958fa79d479895891061e63338bec510b67e821a" url: "https://pub.dev" source: hosted - version: "0.2.12" + version: "0.3.2" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "34a9447102de5741d6dc464c4824a4173b20b91d5685589ea652b051dda1f461" + sha256: cc20ce83432675abcc109b766aad2e420946eaeecc32ffd34bada389cdaa9a74 url: "https://pub.dev" source: hosted - version: "0.2.12" + version: "0.3.2" dart_style: dependency: transitive description: name: dart_style - sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb" + sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.3.0" dartx: dependency: transitive description: @@ -277,10 +277,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "3709d74615bba5e443eb141f6a7f4bcc4788f8fae6f743edadfb79c2a8e6287e" + sha256: "2644a9e0965a7aa3deb09cb8ce4081db4450c178f472818c8cd34216a3070d7b" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "5.0.2" fake_async: dependency: transitive description: @@ -309,10 +309,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: d090ae03df98b0247b82e5928f44d1b959867049d18d73635e2e0bc3f49542b9 + sha256: d8e9ca7e5d1983365c277f12c21b4362df6cf659c99af146ad4d04eb33033013 url: "https://pub.dev" source: hosted - version: "5.2.5" + version: "5.2.6" fixnum: dependency: transitive description: @@ -407,10 +407,10 @@ packages: dependency: transitive description: name: flutter_riverpod - sha256: "40c0d7d03ccd24fa32ea08dcfc4df9bb92c4c26c9a91938945da3be10ed8ca83" + sha256: b3c3a8a9714b7f88dd2a41e1efbc47f76d620b06ab427c62ae7bc82298cd7dbb url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" flutter_test: dependency: "direct dev" description: flutter @@ -489,10 +489,10 @@ packages: dependency: "direct main" description: name: hooks_riverpod - sha256: "048d5d912b9e5ef9db4d274d201a2bfe4270e5694ff5c6719b593d4ae9c512c7" + sha256: "7e673817a7db4d6403a079882485affd3156d79c06209389353d0977d513f905" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" html: dependency: transitive description: @@ -681,26 +681,26 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e" + sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" url: "https://pub.dev" source: hosted - version: "2.0.23" + version: "2.0.24" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972 + sha256: "026b97a6c29da75181a37aae2eba9227f5fe13cb2838c6b975ce209328b8ab4e" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a" + sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" url: "https://pub.dev" source: hosted - version: "2.1.9" + version: "2.1.10" path_provider_platform_interface: dependency: transitive description: @@ -713,10 +713,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d" + sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" pedantic: dependency: transitive description: @@ -829,46 +829,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.2" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" riverpod: dependency: transitive description: name: riverpod - sha256: c5aea6c3fed340707f013a023a37ab388bf45611a8a4f7e76b5e9007eb76cd25 + sha256: b0fbf7927333c5c318f7e2c22c8b4fd2542ba294de0373e80ecdb34e0dcd8dc4 url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" riverpod_analyzer_utils: dependency: transitive description: name: riverpod_analyzer_utils - sha256: "51f415c7b8ed8fbb0114f7c18de015b1465b3311bf75683a209ee2f680bac160" + sha256: "7c2d4de69ba06107c3d7f1b3f43dc3fbdcb2f666b480560af654b4eb89af0d6d" url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.2.0" riverpod_annotation: dependency: "direct main" description: name: riverpod_annotation - sha256: "8f39f568860637c6ca5842fbcc175e5e222269f0f8d6f40472d26772d7d563ba" + sha256: c0f51b3fc5a0cefcbcddb35a10ad542d6c38919c081a25279045158ac7955cfb url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.2" riverpod_generator: dependency: "direct dev" description: name: riverpod_generator - sha256: d7265eac04bad1febff3776b72ac72ec8d0e86efe6b30dc0585899f670bcd26c + sha256: "2c08a6fbbe80d489f1c5208e5358bfdd4d612f1777c47fdb9ff91bb7a2670529" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.4" rxdart: dependency: transitive description: @@ -913,26 +905,26 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: a51a4f9375097f94df1c6e0a49c0374440d31ab026b59d58a7e7660675879db4 + sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.0.17" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "6b84fdf06b32bb336f972d373cd38b63734f3461ba56ac2ba01b56d052796259" + sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: d7fb71e6e20cd3dfffcc823a28da3539b392e53ed5fc5c2b90b55fdaa8a7e8fa + sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" shared_preferences_platform_interface: dependency: transitive description: @@ -945,18 +937,18 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "6737b757e49ba93de2a233df229d0b6a87728cea1684da828cbc718b65dcf9d7" + sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.0.6" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: bd014168e8484837c39ef21065b78f305810ceabc1d4f90be6e3b392ce81b46d + sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" shelf: dependency: transitive description: @@ -1014,18 +1006,18 @@ packages: dependency: transitive description: name: sqflite - sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc" + sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.6" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f + sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684" url: "https://pub.dev" source: hosted - version: "2.4.2+2" + version: "2.4.3" stack_trace: dependency: transitive description: @@ -1134,34 +1126,34 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "1f4d9ebe86f333c15d318f81dcdc08b01d45da44af74552608455ebdc08d9732" + sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1" url: "https://pub.dev" source: hosted - version: "6.0.24" + version: "6.0.25" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: c9cd648d2f7ab56968e049d4e9116f96a85517f1dd806b96a86ea1018a3a82e5 + sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3" url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.1.2" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: e29039160ab3730e42f3d811dc2a6d5f2864b90a70fb765ea60144b03307f682 + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "2dddb3291a57b074dade66b5e07e64401dd2487caefd4e9e2f467138d8c7eb06" + sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.4" url_launcher_platform_interface: dependency: transitive description: @@ -1174,18 +1166,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "574cfbe2390666003c3a1d129bdc4574aaa6728f0c00a4829a81c316de69dd9b" + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" url: "https://pub.dev" source: hosted - version: "2.0.15" + version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "97c9067950a0d09cbd93e2e3f0383d1403989362b97102fbf446473a48079a4b" + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "3.0.5" uuid: dependency: transitive description: