diff --git a/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png index c104685..a8942e2 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/launcher_icon.png and b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/android/app/src/main/res/mipmap-mdpi/launcher_icon.png index 6b5c86d..d423107 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/launcher_icon.png and b/android/app/src/main/res/mipmap-mdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png index dabbb7d..bf3f6c0 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png and b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png index 85a9338..cb1be29 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png and b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png index 9a46eb9..f8379e9 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png and b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/assets/app_icons/icon-black.png b/assets/app_icons/icon-black.png new file mode 100644 index 0000000..1deb648 Binary files /dev/null and b/assets/app_icons/icon-black.png differ diff --git a/assets/app_icons/icon-red.png b/assets/app_icons/icon-red.png new file mode 100644 index 0000000..66394e2 Binary files /dev/null and b/assets/app_icons/icon-red.png differ diff --git a/assets/icon.png b/assets/app_icons/icon.png similarity index 100% rename from assets/icon.png rename to assets/app_icons/icon.png diff --git a/assets/tracker_anilist.webp b/assets/trackers_icons/tracker_anilist.webp similarity index 100% rename from assets/tracker_anilist.webp rename to assets/trackers_icons/tracker_anilist.webp diff --git a/assets/tracker_mal.webp b/assets/trackers_icons/tracker_mal.webp similarity index 100% rename from assets/tracker_mal.webp rename to assets/trackers_icons/tracker_mal.webp diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4..0276c1f 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 7353c41..0425758 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452..e9c0ca2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d93..c14bcda 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cd7b00..7c87f34 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe73094..bc753e2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773c..6758667 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452..e9c0ca2 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463..18b3bc8 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec3034..0c36bdf 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000..c52c278 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000..c8cd132 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..c2ef5cc Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..178bceb Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec3034..0c36bdf 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea..cf6d908 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..d593417 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..9d2db3b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32a..7e11501 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba..2b58545 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf1..b09282d 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/lib/modules/archive_reader/providers/archive_reader_providers.g.dart b/lib/modules/archive_reader/providers/archive_reader_providers.g.dart index ba79585..927b30e 100644 --- a/lib/modules/archive_reader/providers/archive_reader_providers.g.dart +++ b/lib/modules/archive_reader/providers/archive_reader_providers.g.dart @@ -370,4 +370,5 @@ class GetArchiveDataFromFileProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/browse/extension/providers/fetch_anime_sources.g.dart b/lib/modules/browse/extension/providers/fetch_anime_sources.g.dart index 3cff32d..0fc4bec 100644 --- a/lib/modules/browse/extension/providers/fetch_anime_sources.g.dart +++ b/lib/modules/browse/extension/providers/fetch_anime_sources.g.dart @@ -7,7 +7,7 @@ part of 'fetch_anime_sources.dart'; // ************************************************************************** String _$fetchAnimeSourcesListHash() => - r'1b16436684b132a5dc6db2159e38200f1dc9b11e'; + r'c6d2c5cd85d0086160d7af66e9f7f07da7dcbc53'; /// Copied from Dart SDK class _SystemHash { @@ -110,4 +110,5 @@ class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/browse/extension/providers/fetch_manga_sources.g.dart b/lib/modules/browse/extension/providers/fetch_manga_sources.g.dart index c3fd0a2..9ae6d28 100644 --- a/lib/modules/browse/extension/providers/fetch_manga_sources.g.dart +++ b/lib/modules/browse/extension/providers/fetch_manga_sources.g.dart @@ -7,7 +7,7 @@ part of 'fetch_manga_sources.dart'; // ************************************************************************** String _$fetchMangaSourcesListHash() => - r'82665771175f4fea39c0dee77d06d568737ea989'; + r'5a17379eb08d01c945d9f307361f3dad40140ff0'; /// Copied from Dart SDK class _SystemHash { @@ -110,4 +110,5 @@ class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/history/providers/isar_providers.g.dart b/lib/modules/history/providers/isar_providers.g.dart index c0334de..79029d4 100644 --- a/lib/modules/history/providers/isar_providers.g.dart +++ b/lib/modules/history/providers/isar_providers.g.dart @@ -111,4 +111,5 @@ class GetAllHistoryStreamProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/library/providers/isar_providers.g.dart b/lib/modules/library/providers/isar_providers.g.dart index 63bcf71..6406c8a 100644 --- a/lib/modules/library/providers/isar_providers.g.dart +++ b/lib/modules/library/providers/isar_providers.g.dart @@ -206,4 +206,5 @@ class GetAllMangaWithoutCategoriesStreamProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/library/providers/library_state_provider.g.dart b/lib/modules/library/providers/library_state_provider.g.dart index 396b11f..608ec61 100644 --- a/lib/modules/library/providers/library_state_provider.g.dart +++ b/lib/modules/library/providers/library_state_provider.g.dart @@ -1607,4 +1607,5 @@ class MangasSetUnReadStateProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/library/providers/local_archive.g.dart b/lib/modules/library/providers/local_archive.g.dart index fdcc564..198b469 100644 --- a/lib/modules/library/providers/local_archive.g.dart +++ b/lib/modules/library/providers/local_archive.g.dart @@ -128,4 +128,5 @@ class ImportArchivesFromFileProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/detail/manga_detail_main.dart b/lib/modules/manga/detail/manga_detail_main.dart index d716d10..fada79e 100644 --- a/lib/modules/manga/detail/manga_detail_main.dart +++ b/lib/modules/manga/detail/manga_detail_main.dart @@ -26,9 +26,11 @@ class _MangaReaderDetailState extends ConsumerState { await ref.read( updateMangaDetailProvider(mangaId: widget.mangaId, isInit: true) .future); - setState(() { - _isLoading = false; - }); + if (mounted) { + setState(() { + _isLoading = false; + }); + } } bool _isLoading = true; diff --git a/lib/modules/manga/detail/providers/isar_providers.g.dart b/lib/modules/manga/detail/providers/isar_providers.g.dart index e8a33b0..04684b2 100644 --- a/lib/modules/manga/detail/providers/isar_providers.g.dart +++ b/lib/modules/manga/detail/providers/isar_providers.g.dart @@ -193,4 +193,5 @@ class GetChaptersStreamProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/detail/providers/state_providers.g.dart b/lib/modules/manga/detail/providers/state_providers.g.dart index 16c2020..6c0841e 100644 --- a/lib/modules/manga/detail/providers/state_providers.g.dart +++ b/lib/modules/manga/detail/providers/state_providers.g.dart @@ -979,4 +979,5 @@ class ScanlatorsFilterStateProvider extends AutoDisposeNotifierProviderImpl< ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/detail/providers/track_state_providers.g.dart b/lib/modules/manga/detail/providers/track_state_providers.g.dart index d41412c..6c333d4 100644 --- a/lib/modules/manga/detail/providers/track_state_providers.g.dart +++ b/lib/modules/manga/detail/providers/track_state_providers.g.dart @@ -135,4 +135,5 @@ class TrackStateProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart b/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart index 9fcc071..5341957 100644 --- a/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart +++ b/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart @@ -6,7 +6,7 @@ part of 'update_manga_detail_providers.dart'; // RiverpodGenerator // ************************************************************************** -String _$updateMangaDetailHash() => r'143fc36898ba2d83ee6d42d71b01077ce33dcb19'; +String _$updateMangaDetailHash() => r'a3246056de02a353e9c6280f28569bd2c9ad18cb'; /// Copied from Dart SDK class _SystemHash { @@ -118,4 +118,5 @@ class UpdateMangaDetailProvider extends AutoDisposeFutureProvider { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/download/providers/convert_to_cbz.g.dart b/lib/modules/manga/download/providers/convert_to_cbz.g.dart index 9574902..378df4f 100644 --- a/lib/modules/manga/download/providers/convert_to_cbz.g.dart +++ b/lib/modules/manga/download/providers/convert_to_cbz.g.dart @@ -134,4 +134,5 @@ class ConvertToCBZProvider extends AutoDisposeFutureProvider> { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/download/providers/download_provider.dart b/lib/modules/manga/download/providers/download_provider.dart index fe7b10b..0ec4ca0 100644 --- a/lib/modules/manga/download/providers/download_provider.dart +++ b/lib/modules/manga/download/providers/download_provider.dart @@ -35,8 +35,9 @@ Future> downloadChapter( String scanlator = chapter.scanlator!.isNotEmpty ? "${chapter.scanlator!.replaceAll(regExp, '_')}_" : ""; + final isManga = chapter.manga.value!.isManga!; final finalPath = - "downloads/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(regExp, '_')}/$scanlator${chapter.name!.replaceAll(regExp, '_')}"; + "downloads/${isManga ? "Manga" : "Anime"}/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(regExp, '_')}/$scanlator${chapter.name!.replaceAll(regExp, '_')}"; path = Directory("${path1!.path}$finalPath/"); ref .read(getChapterUrlProvider( @@ -63,8 +64,10 @@ Future> downloadChapter( if (!cbzFileExist) { for (var index = 0; index < pageUrls.length; index++) { final path2 = Directory("${path1.path}downloads/"); + final path5 = + Directory("${path1.path}downloads/${isManga ? "Manga" : "Anime"}/"); final path4 = Directory( - "${path2.path}${manga.source} (${manga.lang!.toUpperCase()})/"); + "${path5.path}${manga.source} (${manga.lang!.toUpperCase()})/"); final path3 = Directory("${path4.path}${manga.name!.replaceAll(regExp, '_')}/"); @@ -79,6 +82,9 @@ Future> downloadChapter( if (!(await path2.exists())) { path2.create(); } + if (!(await path5.exists())) { + path5.create(); + } if (!(await path4.exists())) { path4.create(); } diff --git a/lib/modules/manga/download/providers/download_provider.g.dart b/lib/modules/manga/download/providers/download_provider.g.dart index 213fda8..4931ee3 100644 --- a/lib/modules/manga/download/providers/download_provider.g.dart +++ b/lib/modules/manga/download/providers/download_provider.g.dart @@ -6,7 +6,7 @@ part of 'download_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$downloadChapterHash() => r'20dc52124bda6a0d1bfeb675e9320917889fc108'; +String _$downloadChapterHash() => r'c9e99dfc6dac4d501611822490ee73f31270677c'; /// Copied from Dart SDK class _SystemHash { @@ -118,4 +118,5 @@ class DownloadChapterProvider extends AutoDisposeFutureProvider> { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/reader/providers/auto_crop_image_provider.g.dart b/lib/modules/manga/reader/providers/auto_crop_image_provider.g.dart index 3a8d250..e915cfe 100644 --- a/lib/modules/manga/reader/providers/auto_crop_image_provider.g.dart +++ b/lib/modules/manga/reader/providers/auto_crop_image_provider.g.dart @@ -135,4 +135,5 @@ class AutoCropBorderProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/reader/providers/reader_controller_provider.g.dart b/lib/modules/manga/reader/providers/reader_controller_provider.g.dart index 470da81..639754a 100644 --- a/lib/modules/manga/reader/providers/reader_controller_provider.g.dart +++ b/lib/modules/manga/reader/providers/reader_controller_provider.g.dart @@ -122,4 +122,5 @@ class CurrentIndexProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index de7cc07..c4fee7d 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'dart:io'; import 'package:draggable_menu/draggable_menu.dart'; import 'package:extended_image/extended_image.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter/material.dart'; @@ -165,7 +166,7 @@ class _MangaChapterPageGalleryState late Chapter chapter = widget.chapter; - List _uChapDataPreload = []; + final List _uChapDataPreload = []; bool animatePageTransitions = isar.settings.getSync(227)!.animatePageTransitions!; Duration? _doubleTapAnimationDuration() { @@ -179,11 +180,10 @@ class _MangaChapterPageGalleryState return const Duration(milliseconds: 200); } - late int _currentIndex = _readerController.getPageIndex(); + late int? _currentIndex = _readerController.getPageIndex(); T? ambiguate(T? value) => value; - BuildContext? _listViewContext; late ListObserverController _observerController; final ScrollController _scrollController = ScrollController(); @override @@ -192,10 +192,6 @@ class _MangaChapterPageGalleryState controller: _scrollController, ); - ambiguate(WidgetsBinding.instance)?.addPostFrameCallback((timeStamp) { - ListViewOnceObserveNotification().dispatch(_listViewContext); - }); - _doubleClickAnimationController = AnimationController( duration: _doubleTapAnimationDuration(), vsync: this); @@ -245,78 +241,11 @@ class _MangaChapterPageGalleryState } if (mounted) { uChapDataPreloadL.addAll(uChapDataPreloadP); - setState(() { - _uChapDataPreload = uChapDataPreloadL; - _chapterUrlModel = chapterData; - _readerController = ReaderController(chapter: chap); - _readerController = ReaderController( - chapter: _uChapDataPreload[_currentIndex].chapter!); - chapter = chap; - }); } } } catch (_) {} } - _preloadPrevChapter(GetChapterUrlModel chapterData, Chapter chap) async { - // try { - // int length = 0; - // bool isExist = false; - // List preChap = []; - // for (var ee in _uChapDataPreload) { - // if (chapterData.uChapDataPreload.first.chapter!.url == - // ee.chapter!.url) { - // isExist = true; - // } - // } - // if (!isExist) { - // for (var aa in chapterData.uChapDataPreload) { - // preChap.add(aa); - // } - // } - // if (preChap.isNotEmpty) { - // if (_uChapDataPreload.isNotEmpty) { - // length = preChap.length; - - // for (var i = 0; i < _uChapDataPreload.length; i++) { - // int index = i + length; - // final dataPreload = _uChapDataPreload[i]; - // preChap.add(UChapDataPreload( - // dataPreload.chapter, - // dataPreload.path, - // dataPreload.url, - // dataPreload.isLocale, - // dataPreload.archiveImage, - // dataPreload.index, - // dataPreload.hasNextPrePage, - // dataPreload.hasPrevPrePage, - // dataPreload.chapterUrlModel, - // index)); - // } - // } - - // if (mounted) { - // _uChapDataPreload.clear(); - // _uChapDataPreload.addAll(preChap); - // setState(() { - // _readerController = ReaderController(chapter: chap); - // _currentIndex = - // _uChapDataPreload[_currentIndex + 1].pageIndex! + length; - // _chapterUrlModel = chapterData; - // chapter = chap; - // }); - // try { - // if (_isVerticalContinous()) { - // _observerController.jumpTo(index: _currentIndex); - // } else { - // _extendedController.jumpToPage(_currentIndex); - // } - // } catch (_) {} - // } - // } - // } catch (_) {} - } - late bool _isBookmarked = _readerController.getChapterBookmarked(); _initCurrentIndex() async { _uChapDataPreload.addAll(_chapterUrlModel.uChapDataPreload); @@ -325,43 +254,25 @@ class _MangaChapterPageGalleryState _selectedValue = _readerController.getReaderMode(); _setReaderMode(_selectedValue!, true); ref.read(currentIndexProvider(chapter).notifier).setCurrentIndex( - _uChapDataPreload[_currentIndex].index!, + _uChapDataPreload[_currentIndex ?? 0].index!, ); } void _onPageChanged(int index) { - _readerController = - ReaderController(chapter: _uChapDataPreload[index].chapter!); - - _chapterUrlModel = _uChapDataPreload[index].chapterUrlModel!; - _currentIndex = index; - _isBookmarked = _readerController.getChapterBookmarked(); - _readerController.setMangaHistoryUpdate(); - _readerController.setPageIndex(_uChapDataPreload[_currentIndex].index!); + if (_chapterId != _uChapDataPreload[_currentIndex ?? 0].chapter!.id) { + if (mounted) { + setState(() { + _chapterUrlModel = + _uChapDataPreload[_currentIndex ?? 0].chapterUrlModel!; + _chapterId = _uChapDataPreload[_currentIndex ?? 0].chapter!.id; + }); + } + } ref.read(currentIndexProvider(chapter).notifier).setCurrentIndex( _uChapDataPreload[index].index!, ); - if (_uChapDataPreload[index].index! == 0) { - try { - bool hasPrevChapter = _readerController.getChapterIndex() + 1 != - _readerController.getChaptersLength(); - - final chapter = - hasPrevChapter ? _readerController.getPrevChapter() : null; - - if (chapter != null) { - ref - .watch(getChapterUrlProvider( - chapter: chapter, - ).future) - .then((value) async { - await _preloadPrevChapter(value, chapter); - }); - } - } catch (_) {} - } if (_uChapDataPreload[index].index! == _readerController.getPageLength([]) - 1) { try { @@ -379,7 +290,6 @@ class _MangaChapterPageGalleryState } } catch (_) {} } - setState(() {}); } final double _imageDetailY = 0; @@ -492,7 +402,7 @@ class _MangaChapterPageGalleryState } late final _extendedController = ExtendedPageController( - initialPage: _currentIndex, + initialPage: _currentIndex ?? 0, shouldIgnorePointerWhenScrolling: false, ); @@ -535,11 +445,6 @@ class _MangaChapterPageGalleryState late bool _showPagesNumber = _readerController.getShowPageNumber(); _setReaderMode(ReaderMode value, bool isInit) async { - final indexPos = _posIndex == null - ? _currentIndex - : isInit - ? _currentIndex - : _posIndex; _readerController.setReaderMode(value); if (value == ReaderMode.vertical) { if (mounted) { @@ -550,7 +455,7 @@ class _MangaChapterPageGalleryState }); await Future.delayed(const Duration(milliseconds: 30)); - _extendedController.jumpToPage(indexPos!); + _extendedController.jumpToPage(_currentIndex!); } } else if (value == ReaderMode.ltr || value == ReaderMode.rtl) { if (mounted) { @@ -565,7 +470,7 @@ class _MangaChapterPageGalleryState }); await Future.delayed(const Duration(milliseconds: 30)); - _extendedController.jumpToPage(indexPos!); + _extendedController.jumpToPage(_currentIndex!); } } else { if (mounted) { @@ -575,7 +480,7 @@ class _MangaChapterPageGalleryState }); await Future.delayed(const Duration(milliseconds: 30)); _observerController.animateTo( - index: indexPos!, + index: _currentIndex!, duration: const Duration(milliseconds: 1), curve: Curves.ease); } @@ -993,9 +898,9 @@ class _MangaChapterPageGalleryState behavior: HitTestBehavior.translucent, onTap: () { if (_isReversHorizontal) { - _onBtnTapped(_currentIndex + 1, false); + _onBtnTapped(_currentIndex! + 1, false); } else { - _onBtnTapped(_currentIndex - 1, true); + _onBtnTapped(_currentIndex! - 1, true); } }, onDoubleTapDown: _isVerticalContinous() @@ -1031,9 +936,9 @@ class _MangaChapterPageGalleryState behavior: HitTestBehavior.translucent, onTap: () { if (_isReversHorizontal) { - _onBtnTapped(_currentIndex - 1, true); + _onBtnTapped(_currentIndex! - 1, true); } else { - _onBtnTapped(_currentIndex + 1, false); + _onBtnTapped(_currentIndex! + 1, false); } }, onDoubleTapDown: _isVerticalContinous() @@ -1061,7 +966,7 @@ class _MangaChapterPageGalleryState child: GestureDetector( behavior: HitTestBehavior.translucent, onTap: () { - _onBtnTapped(_currentIndex - 1, true); + _onBtnTapped(_currentIndex! - 1, true); }, onDoubleTapDown: _isVerticalContinous() ? (TapDownDetails details) { @@ -1081,7 +986,7 @@ class _MangaChapterPageGalleryState child: GestureDetector( behavior: HitTestBehavior.translucent, onTap: () { - _onBtnTapped(_currentIndex + 1, false); + _onBtnTapped(_currentIndex! + 1, false); }, onDoubleTapDown: _isVerticalContinous() ? (TapDownDetails details) { @@ -1103,7 +1008,7 @@ class _MangaChapterPageGalleryState _selectedValue == ReaderMode.webtoon; } - int? _posIndex; + late int? _chapterId = widget.chapter.id; final StreamController _rebuildDetail = StreamController.broadcast(); final Map detailKeys = {}; @@ -1126,320 +1031,334 @@ class _MangaChapterPageGalleryState return false; }, - child: Stack( - children: [ - _isVerticalContinous() - ? PhotoViewGallery.builder( - itemCount: 1, - builder: (_, __) => PhotoViewGalleryPageOptions.customChild( - controller: _photoViewController, - scaleStateController: _photoViewScaleStateController, - basePosition: _scalePosition, - onScaleEnd: _onScaleEnd, - child: ListViewObserver( - controller: _observerController, - sliverListContexts: () { - return [ - if (_listViewContext != null) _listViewContext! - ]; - }, - onObserveAll: (resultMap) { - final model = resultMap[_listViewContext]; - if (model == null) return; - _posIndex = model.firstChild?.index ?? 0; - setState(() { - _readerController = ReaderController( - chapter: - _uChapDataPreload[_posIndex ?? 0].chapter!); + child: NotificationListener( + onNotification: (notification) { + if (notification.direction == ScrollDirection.idle) { + _readerController.setMangaHistoryUpdate(); + _readerController + .setPageIndex(_uChapDataPreload[_currentIndex ?? 0].index!); + } + return true; + }, + child: StreamBuilder( + stream: + isar.chapters.watchObject(_chapterId!, fireImmediately: true), + builder: (context, snapshot) { + final chapterData = snapshot.hasData && snapshot.data != null + ? snapshot.data + : chapter; + if (chapterData != null) { + _readerController = ReaderController(chapter: chapterData); + _isBookmarked = chapterData.isBookmarked!; + } + return Stack( + children: [ + _isVerticalContinous() + ? PhotoViewGallery.builder( + itemCount: 1, + builder: (_, __) => + PhotoViewGalleryPageOptions.customChild( + controller: _photoViewController, + scaleStateController: + _photoViewScaleStateController, + basePosition: _scalePosition, + onScaleEnd: _onScaleEnd, + child: ListViewObserver( + controller: _observerController, + onObserve: (result) { + _currentIndex = result.firstChild?.index ?? 0; - _chapterUrlModel = _uChapDataPreload[_posIndex ?? 0] - .chapterUrlModel!; - - _currentIndex = _posIndex!; - }); - _isBookmarked = - _readerController.getChapterBookmarked(); - _readerController.setMangaHistoryUpdate(); - _readerController.setPageIndex( - _uChapDataPreload[_posIndex ?? 0].index!); - - ref - .read(currentIndexProvider(chapter).notifier) - .setCurrentIndex( - _uChapDataPreload[_posIndex ?? 0].index!, - ); - }, - child: ListView.separated( - cacheExtent: 15 * mediaHeight(context, 1), - itemCount: _uChapDataPreload.length, - controller: _scrollController, - itemBuilder: (context, index) { - if (_listViewContext != context) { - _listViewContext = context; - } - - _scrollController.addListener(() { - if (_scrollController.position.pixels == - _scrollController.position.minScrollExtent) { - try { - bool hasPrevChapter = - _readerController.getChapterIndex() + 1 != - _readerController.getChaptersLength(); - - final chapter = hasPrevChapter - ? _readerController.getPrevChapter() - : null; - - if (chapter != null) { - ref - .watch(getChapterUrlProvider( - chapter: chapter, - ).future) - .then((value) async { - await _preloadPrevChapter(value, chapter); - }); + if (_chapterId != + _uChapDataPreload[_currentIndex ?? 0] + .chapter! + .id) { + if (mounted) { + setState(() { + _chapterUrlModel = + _uChapDataPreload[_currentIndex ?? 0] + .chapterUrlModel!; + _chapterId = + _uChapDataPreload[_currentIndex ?? 0] + .chapter! + .id; + }); + } } - } catch (_) {} - } - if (_scrollController.position.pixels == - _scrollController.position.maxScrollExtent) { - try { - bool hasNextChapter = - _readerController.getChapterIndex() != 0; - final chapter = hasNextChapter - ? _readerController.getNextChapter() - : null; - if (chapter != null) { - ref - .watch(getChapterUrlProvider( - chapter: chapter, - ).future) - .then((value) { - _preloadNextChapter(value, chapter); + ref + .read( + currentIndexProvider(chapter).notifier) + .setCurrentIndex( + _uChapDataPreload[_currentIndex ?? 0] + .index!, + ); + }, + child: ListView.separated( + cacheExtent: 15 * mediaHeight(context, 1), + itemCount: _uChapDataPreload.length, + controller: _scrollController, + itemBuilder: (context, index) { + _scrollController.addListener(() { + if (_scrollController.position.pixels == + _scrollController + .position.maxScrollExtent) { + try { + bool hasNextChapter = _readerController + .getChapterIndex() != + 0; + final chapter = hasNextChapter + ? _readerController.getNextChapter() + : null; + if (chapter != null) { + ref + .watch(getChapterUrlProvider( + chapter: chapter, + ).future) + .then((value) { + _preloadNextChapter(value, chapter); + }); + } + } catch (_) {} + } }); - } - } catch (_) {} - } - }); - return GestureDetector( - behavior: HitTestBehavior.translucent, - onDoubleTapDown: (TapDownDetails details) { - _toggleScale(details.globalPosition); - }, - onDoubleTap: () {}, - child: ImageViewVertical( - archiveImage: _cropImagesList.isNotEmpty && - cropBorders == true - ? _cropImagesList[index] - : _uChapDataPreload[index].archiveImage, - titleManga: _readerController.getMangaName(), - source: _readerController.getSourceName(), - index: _uChapDataPreload[index].index!, - url: _uChapDataPreload[index].url!, - path: _uChapDataPreload[index].path!, - chapter: _readerController.getChapterTitle(), - length: _readerController - .getPageLength(_chapterUrlModel.pageUrls), - isLocale: _cropImagesList.isNotEmpty && - cropBorders == true - ? true - : _uChapDataPreload[index].isLocale!, - lang: _uChapDataPreload[index] - .chapter! - .manga - .value! - .lang!, - ), - ); - }, - separatorBuilder: (_, __) => Divider( - color: Colors.black, - height: - _selectedValue == ReaderMode.webtoon ? 0 : 6), - ), - ), - ), - ) - : Material( - color: Colors.black, - shadowColor: Colors.black, - child: ExtendedImageGesturePageView.builder( - controller: _extendedController, - scrollDirection: _scrollDirection, - reverse: _isReversHorizontal, - physics: const ClampingScrollPhysics(), - preloadPagesCount: _isZoom ? 0 : 6, - canScrollPage: (GestureDetails? gestureDetails) { - return gestureDetails != null - ? !(gestureDetails.totalScale! > 1.0) - : true; - }, - itemBuilder: (BuildContext context, int index) { - return ImageViewCenter( - archiveImage: - _cropImagesList.isNotEmpty && cropBorders == true - ? _cropImagesList[index] - : _uChapDataPreload[index].archiveImage, - titleManga: _readerController.getMangaName(), - source: _readerController.getSourceName(), - index: _uChapDataPreload[index].index!, - url: _uChapDataPreload[index].url!, - path: _uChapDataPreload[index].path!, - chapter: _readerController.getChapterTitle(), - length: _readerController - .getPageLength(_chapterUrlModel.pageUrls), - loadStateChanged: (ExtendedImageState state) { - if (state.extendedImageLoadState == - LoadState.loading) { - final ImageChunkEvent? loadingProgress = - state.loadingProgress; - final double progress = - loadingProgress?.expectedTotalBytes != null - ? loadingProgress!.cumulativeBytesLoaded / - loadingProgress.expectedTotalBytes! - : 0; - return Container( - color: Colors.black, - height: mediaHeight(context, 0.8), - child: CircularProgressIndicatorAnimateRotate( - progress: progress), - ); - } - if (state.extendedImageLoadState == - LoadState.completed) { - return StreamBuilder( - builder: (BuildContext context, - AsyncSnapshot data) { - return ExtendedImageGesture( - state, - canScaleImage: (_) => _imageDetailY == 0, - imageBuilder: (Widget image) { - return Stack( - children: [ - Positioned.fill( - top: _imageDetailY, - bottom: -_imageDetailY, - child: image, - ), - ], - ); + return GestureDetector( + behavior: HitTestBehavior.translucent, + onDoubleTapDown: (TapDownDetails details) { + _toggleScale(details.globalPosition); }, + onDoubleTap: () {}, + child: ImageViewVertical( + archiveImage: + _cropImagesList.isNotEmpty && + cropBorders == true + ? _cropImagesList[index] + : _uChapDataPreload[index] + .archiveImage, + titleManga: + _readerController.getMangaName(), + source: _readerController.getSourceName(), + index: _uChapDataPreload[index].index!, + url: _uChapDataPreload[index].url!, + path: _uChapDataPreload[index].path!, + chapter: + _readerController.getChapterTitle(), + length: _readerController.getPageLength( + _chapterUrlModel.pageUrls), + isLocale: _cropImagesList.isNotEmpty && + cropBorders == true + ? true + : _uChapDataPreload[index].isLocale!, + lang: _uChapDataPreload[index] + .chapter! + .manga + .value! + .lang!, + ), ); }, - initialData: _imageDetailY, - stream: _rebuildDetail.stream, - ); - } - if (state.extendedImageLoadState == - LoadState.failed) { - return Container( - color: Colors.black, - height: mediaHeight(context, 0.8), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - onPressed: () { - state.reLoadImage(); - }, - child: const Icon( - Icons.replay_outlined, - size: 30, - )), - ], - )); - } - return Container(); - }, - initGestureConfigHandler: (ExtendedImageState state) { - double? initialScale = 1.0; - final size = MediaQuery.of(context).size; - if (state.extendedImageInfo != null) { - initialScale = initScale( - size: size, - initialScale: initialScale, - imageSize: Size( - state.extendedImageInfo!.image.width - .toDouble(), - state.extendedImageInfo!.image.height - .toDouble())); - } - return GestureConfig( - inertialSpeed: 200, - inPageView: true, - initialScale: initialScale!, - maxScale: 8, - animationMaxScale: 8, - initialAlignment: InitialAlignment.center, - cacheGesture: true, - hitTestBehavior: HitTestBehavior.translucent, - ); - }, - onDoubleTap: (ExtendedImageGestureState state) { - final Offset? pointerDownPosition = - state.pointerDownPosition; - final double? begin = - state.gestureDetails!.totalScale; - double end; + separatorBuilder: (_, __) => Divider( + color: Colors.black, + height: _selectedValue == ReaderMode.webtoon + ? 0 + : 6), + ), + ), + ), + ) + : Material( + color: Colors.black, + shadowColor: Colors.black, + child: ExtendedImageGesturePageView.builder( + controller: _extendedController, + scrollDirection: _scrollDirection, + reverse: _isReversHorizontal, + physics: const ClampingScrollPhysics(), + preloadPagesCount: _isZoom ? 0 : 6, + canScrollPage: (GestureDetails? gestureDetails) { + return gestureDetails != null + ? !(gestureDetails.totalScale! > 1.0) + : true; + }, + itemBuilder: (BuildContext context, int index) { + return ImageViewCenter( + archiveImage: _cropImagesList.isNotEmpty && + cropBorders == true + ? _cropImagesList[index] + : _uChapDataPreload[index].archiveImage, + titleManga: _readerController.getMangaName(), + source: _readerController.getSourceName(), + index: _uChapDataPreload[index].index!, + url: _uChapDataPreload[index].url!, + path: _uChapDataPreload[index].path!, + chapter: _readerController.getChapterTitle(), + length: _readerController + .getPageLength(_chapterUrlModel.pageUrls), + loadStateChanged: (ExtendedImageState state) { + if (state.extendedImageLoadState == + LoadState.loading) { + final ImageChunkEvent? loadingProgress = + state.loadingProgress; + final double progress = + loadingProgress?.expectedTotalBytes != + null + ? loadingProgress! + .cumulativeBytesLoaded / + loadingProgress + .expectedTotalBytes! + : 0; + return Container( + color: Colors.black, + height: mediaHeight(context, 0.8), + child: + CircularProgressIndicatorAnimateRotate( + progress: progress), + ); + } + if (state.extendedImageLoadState == + LoadState.completed) { + return StreamBuilder( + builder: (BuildContext context, + AsyncSnapshot data) { + return ExtendedImageGesture( + state, + canScaleImage: (_) => + _imageDetailY == 0, + imageBuilder: (Widget image) { + return Stack( + children: [ + Positioned.fill( + top: _imageDetailY, + bottom: -_imageDetailY, + child: image, + ), + ], + ); + }, + ); + }, + initialData: _imageDetailY, + stream: _rebuildDetail.stream, + ); + } + if (state.extendedImageLoadState == + LoadState.failed) { + return Container( + color: Colors.black, + height: mediaHeight(context, 0.8), + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + ElevatedButton( + onPressed: () { + state.reLoadImage(); + }, + child: const Icon( + Icons.replay_outlined, + size: 30, + )), + ], + )); + } + return Container(); + }, + initGestureConfigHandler: + (ExtendedImageState state) { + double? initialScale = 1.0; + final size = MediaQuery.of(context).size; + if (state.extendedImageInfo != null) { + initialScale = initScale( + size: size, + initialScale: initialScale, + imageSize: Size( + state.extendedImageInfo!.image + .width + .toDouble(), + state.extendedImageInfo!.image + .height + .toDouble())); + } + return GestureConfig( + inertialSpeed: 200, + inPageView: true, + initialScale: initialScale!, + maxScale: 8, + animationMaxScale: 8, + initialAlignment: InitialAlignment.center, + cacheGesture: true, + hitTestBehavior: + HitTestBehavior.translucent, + ); + }, + onDoubleTap: + (ExtendedImageGestureState state) { + final Offset? pointerDownPosition = + state.pointerDownPosition; + final double? begin = + state.gestureDetails!.totalScale; + double end; - //remove old - _doubleClickAnimation - ?.removeListener(_doubleClickAnimationListener); + //remove old + _doubleClickAnimation?.removeListener( + _doubleClickAnimationListener); - //stop pre - _doubleClickAnimationController.stop(); + //stop pre + _doubleClickAnimationController.stop(); - //reset to use - _doubleClickAnimationController.reset(); + //reset to use + _doubleClickAnimationController.reset(); - if (begin == doubleTapScales[0]) { - setState(() { - _isZoom = true; - }); - end = doubleTapScales[1]; - } else { - setState(() { - _isZoom = false; - }); - end = doubleTapScales[0]; - } + if (begin == doubleTapScales[0]) { + setState(() { + _isZoom = true; + }); + end = doubleTapScales[1]; + } else { + setState(() { + _isZoom = false; + }); + end = doubleTapScales[0]; + } - _doubleClickAnimationListener = () { - state.handleDoubleTap( - scale: _doubleClickAnimation!.value, - doubleTapPosition: pointerDownPosition); - }; + _doubleClickAnimationListener = () { + state.handleDoubleTap( + scale: _doubleClickAnimation!.value, + doubleTapPosition: + pointerDownPosition); + }; - _doubleClickAnimation = Tween( - begin: begin, end: end) - .animate(CurvedAnimation( - curve: Curves.ease, - parent: _doubleClickAnimationController)); + _doubleClickAnimation = Tween( + begin: begin, end: end) + .animate(CurvedAnimation( + curve: Curves.ease, + parent: + _doubleClickAnimationController)); - _doubleClickAnimation! - .addListener(_doubleClickAnimationListener); + _doubleClickAnimation!.addListener( + _doubleClickAnimationListener); - _doubleClickAnimationController.forward(); - }, - isLocale: - _cropImagesList.isNotEmpty && cropBorders == true - ? true - : _uChapDataPreload[index].isLocale!, - lang: _uChapDataPreload[index] - .chapter! - .manga - .value! - .lang!, - ); - }, - itemCount: _uChapDataPreload.length, - onPageChanged: _onPageChanged)), - _gestureRightLeft(), - _gestureTopBottom(), - _showMore(), - _showPage(), - ], + _doubleClickAnimationController.forward(); + }, + isLocale: _cropImagesList.isNotEmpty && + cropBorders == true + ? true + : _uChapDataPreload[index].isLocale!, + lang: _uChapDataPreload[index] + .chapter! + .manga + .value! + .lang!, + ); + }, + itemCount: _uChapDataPreload.length, + onPageChanged: _onPageChanged)), + _gestureRightLeft(), + _gestureTopBottom(), + _showMore(), + _showPage(), + ], + ); + }), ), ); } diff --git a/lib/modules/more/about_screen.dart b/lib/modules/more/about_screen.dart index a2e535d..da0aedc 100644 --- a/lib/modules/more/about_screen.dart +++ b/lib/modules/more/about_screen.dart @@ -56,13 +56,14 @@ class _AboutScreenState extends State { children: [ SizedBox( height: 150, - child: Center( - child: Image.asset( - "assets/icon.png", - color: Theme.of(context).brightness == Brightness.light - ? Colors.black - : Colors.white, - ))), + // child: Center( + // child: Image.asset( + // "assets/icon.png", + // color: Theme.of(context).brightness == Brightness.light + // ? Colors.black + // : Colors.white, + // )) + ), Flexible( flex: 3, child: Column( diff --git a/lib/modules/more/categories/providers/isar_providers.g.dart b/lib/modules/more/categories/providers/isar_providers.g.dart index 2676c8e..8d4e181 100644 --- a/lib/modules/more/categories/providers/isar_providers.g.dart +++ b/lib/modules/more/categories/providers/isar_providers.g.dart @@ -112,4 +112,5 @@ class GetMangaCategorieStreamProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/more_screen.dart b/lib/modules/more/more_screen.dart index f8ff591..27f4136 100644 --- a/lib/modules/more/more_screen.dart +++ b/lib/modules/more/more_screen.dart @@ -16,13 +16,14 @@ class MoreScreen extends StatelessWidget { children: [ SizedBox( height: 200, - child: Center( - child: Image.asset( - "assets/icon.png", - color: Theme.of(context).brightness == Brightness.light - ? Colors.black - : Colors.white, - ))), + // child: Center( + // child: Image.asset( + // "assets/icon.png", + // color: Theme.of(context).brightness == Brightness.light + // ? Colors.black + // : Colors.white, + // )) + ), const Divider(), // ListTile( // onTap: () {}, diff --git a/lib/modules/more/providers/incognito_mode_state_provider.g.dart b/lib/modules/more/providers/incognito_mode_state_provider.g.dart index f7ef5ef..c11bdc1 100644 --- a/lib/modules/more/providers/incognito_mode_state_provider.g.dart +++ b/lib/modules/more/providers/incognito_mode_state_provider.g.dart @@ -23,4 +23,5 @@ final incognitoModeStateProvider = ); typedef _$IncognitoModeState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/appearance/providers/blend_level_state_provider.g.dart b/lib/modules/more/settings/appearance/providers/blend_level_state_provider.g.dart index ac41805..5555987 100644 --- a/lib/modules/more/settings/appearance/providers/blend_level_state_provider.g.dart +++ b/lib/modules/more/settings/appearance/providers/blend_level_state_provider.g.dart @@ -22,4 +22,5 @@ final blendLevelStateProvider = ); typedef _$BlendLevelState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/appearance/providers/date_format_state_provider.g.dart b/lib/modules/more/settings/appearance/providers/date_format_state_provider.g.dart index 4aa2d66..bbcfa1e 100644 --- a/lib/modules/more/settings/appearance/providers/date_format_state_provider.g.dart +++ b/lib/modules/more/settings/appearance/providers/date_format_state_provider.g.dart @@ -39,4 +39,5 @@ final relativeTimesTampsStateProvider = ); typedef _$RelativeTimesTampsState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.g.dart b/lib/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.g.dart index 4dec183..7a7da4d 100644 --- a/lib/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.g.dart +++ b/lib/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.g.dart @@ -23,4 +23,5 @@ final flexSchemeColorStateProvider = ); typedef _$FlexSchemeColorState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.g.dart b/lib/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.g.dart index 59401fb..01e66ad 100644 --- a/lib/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.g.dart +++ b/lib/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.g.dart @@ -23,4 +23,5 @@ final pureBlackDarkModeStateProvider = ); typedef _$PureBlackDarkModeState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/appearance/providers/theme_mode_state_provider.g.dart b/lib/modules/more/settings/appearance/providers/theme_mode_state_provider.g.dart index db49e4b..ff9279f 100644 --- a/lib/modules/more/settings/appearance/providers/theme_mode_state_provider.g.dart +++ b/lib/modules/more/settings/appearance/providers/theme_mode_state_provider.g.dart @@ -22,4 +22,5 @@ final themeModeStateProvider = ); typedef _$ThemeModeState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/browse/providers/browse_state_provider.g.dart b/lib/modules/more/settings/browse/providers/browse_state_provider.g.dart index 4281073..d0eaa3a 100644 --- a/lib/modules/more/settings/browse/providers/browse_state_provider.g.dart +++ b/lib/modules/more/settings/browse/providers/browse_state_provider.g.dart @@ -39,4 +39,5 @@ final showNSFWStateProvider = ); typedef _$ShowNSFWState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/downloads/providers/downloads_state_provider.g.dart b/lib/modules/more/settings/downloads/providers/downloads_state_provider.g.dart index 09ae6aa..0d663d6 100644 --- a/lib/modules/more/settings/downloads/providers/downloads_state_provider.g.dart +++ b/lib/modules/more/settings/downloads/providers/downloads_state_provider.g.dart @@ -56,4 +56,5 @@ final downloadLocationStateProvider = AutoDisposeNotifierProvider< ); typedef _$DownloadLocationState = AutoDisposeNotifier<(String, String)>; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/reader/providers/reader_state_provider.g.dart b/lib/modules/more/settings/reader/providers/reader_state_provider.g.dart index 82ab9c1..a544d69 100644 --- a/lib/modules/more/settings/reader/providers/reader_state_provider.g.dart +++ b/lib/modules/more/settings/reader/providers/reader_state_provider.g.dart @@ -73,4 +73,5 @@ final cropBordersStateProvider = ); typedef _$CropBordersState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/modules/more/settings/track/providers/track_providers.g.dart b/lib/modules/more/settings/track/providers/track_providers.g.dart index 72c74f2..bc2d5e3 100644 --- a/lib/modules/more/settings/track/providers/track_providers.g.dart +++ b/lib/modules/more/settings/track/providers/track_providers.g.dart @@ -121,4 +121,5 @@ class TracksProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/providers/l10n_providers.g.dart b/lib/providers/l10n_providers.g.dart index f70ba92..393407f 100644 --- a/lib/providers/l10n_providers.g.dart +++ b/lib/providers/l10n_providers.g.dart @@ -22,4 +22,5 @@ final l10nLocaleStateProvider = ); typedef _$L10nLocaleState = AutoDisposeNotifier; -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/providers/storage_provider.dart b/lib/providers/storage_provider.dart index 14868f2..5e097cd 100644 --- a/lib/providers/storage_provider.dart +++ b/lib/providers/storage_provider.dart @@ -65,16 +65,18 @@ class StorageProvider { String scanlator = chapter.scanlator!.isNotEmpty ? "${chapter.scanlator!.replaceAll(_regExpChar, '_')}_" : ""; + final isManga = chapter.manga.value!.isManga!; final dir = await getDirectory(); return Directory( - "${dir!.path}/downloads/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(_regExpChar, '_')}/$scanlator${chapter.name!.replaceAll(_regExpChar, '_')}/"); + "${dir!.path}/downloads/${isManga ? "Manga" : "Anime"}/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(_regExpChar, '_')}/$scanlator${chapter.name!.replaceAll(_regExpChar, '_')}/"); } Future getMangaMainDirectory(Chapter chapter) async { final manga = chapter.manga.value!; + final isManga = chapter.manga.value!.isManga!; final dir = await getDirectory(); return Directory( - "${dir!.path}/downloads/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(_regExpChar, '_')}/"); + "${dir!.path}/downloads/${isManga ? "Manga" : "Anime"}/${manga.source} (${manga.lang!.toUpperCase()})/${manga.name!.replaceAll(_regExpChar, '_')}/"); } Future getDatabaseDirectory() async { diff --git a/lib/router/router.g.dart b/lib/router/router.g.dart index b81a0de..0348cbd 100644 --- a/lib/router/router.g.dart +++ b/lib/router/router.g.dart @@ -140,4 +140,5 @@ class RouterCurrentLocationStateProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/get_anime_servers.g.dart b/lib/services/get_anime_servers.g.dart index b00c5ec..d14802c 100644 --- a/lib/services/get_anime_servers.g.dart +++ b/lib/services/get_anime_servers.g.dart @@ -6,7 +6,7 @@ part of 'get_anime_servers.dart'; // RiverpodGenerator // ************************************************************************** -String _$getAnimeServersHash() => r'b8bc284660d0034cedff0cfd7d11bc62da9d2915'; +String _$getAnimeServersHash() => r'cd7f0fc4ee58ec02b015348aed60b1b0f2d1b300'; /// Copied from Dart SDK class _SystemHash { @@ -109,4 +109,5 @@ class GetAnimeServersProvider extends AutoDisposeFutureProvider> { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/get_chapter_url.g.dart b/lib/services/get_chapter_url.g.dart index ea1642d..2052711 100644 --- a/lib/services/get_chapter_url.g.dart +++ b/lib/services/get_chapter_url.g.dart @@ -6,7 +6,7 @@ part of 'get_chapter_url.dart'; // RiverpodGenerator // ************************************************************************** -String _$getChapterUrlHash() => r'22f4703bcc2a2f87278a32a884746b8e0b970984'; +String _$getChapterUrlHash() => r'f013c2b64c901a02da622ca5906df744e53c76be'; /// Copied from Dart SDK class _SystemHash { @@ -110,4 +110,5 @@ class GetChapterUrlProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/get_latest_updates_manga.g.dart b/lib/services/get_latest_updates_manga.g.dart index 43df866..dce6b43 100644 --- a/lib/services/get_latest_updates_manga.g.dart +++ b/lib/services/get_latest_updates_manga.g.dart @@ -7,7 +7,7 @@ part of 'get_latest_updates_manga.dart'; // ************************************************************************** String _$getLatestUpdatesMangaHash() => - r'acf967d75f5969d51eaa91c8d4efe99796c1e1b2'; + r'ae5b5ed757a02801592ff62617d1bdea4f763cda'; /// Copied from Dart SDK class _SystemHash { @@ -122,4 +122,5 @@ class GetLatestUpdatesMangaProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/get_manga_detail.g.dart b/lib/services/get_manga_detail.g.dart index 9fbf979..7a30692 100644 --- a/lib/services/get_manga_detail.g.dart +++ b/lib/services/get_manga_detail.g.dart @@ -6,7 +6,7 @@ part of 'get_manga_detail.dart'; // RiverpodGenerator // ************************************************************************** -String _$getMangaDetailHash() => r'352d9572294f2529443513183a4a7bec3339be1c'; +String _$getMangaDetailHash() => r'025ccc11f94f9b69bd85d86833bc261f66b74f7f'; /// Copied from Dart SDK class _SystemHash { @@ -118,4 +118,5 @@ class GetMangaDetailProvider extends AutoDisposeFutureProvider { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/get_popular_manga.g.dart b/lib/services/get_popular_manga.g.dart index 7a2232b..05a4db5 100644 --- a/lib/services/get_popular_manga.g.dart +++ b/lib/services/get_popular_manga.g.dart @@ -6,7 +6,7 @@ part of 'get_popular_manga.dart'; // RiverpodGenerator // ************************************************************************** -String _$getPopularMangaHash() => r'34fb3652db050366ced9f57dd1286d62f4b63fe4'; +String _$getPopularMangaHash() => r'0ba0bb05d0e47aac2f5f1efb742b0b0f8739b1e8'; /// Copied from Dart SDK class _SystemHash { @@ -119,4 +119,5 @@ class GetPopularMangaProvider return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/http_service/cloudflare/cookie.g.dart b/lib/services/http_service/cloudflare/cookie.g.dart index 051572c..d2a8568 100644 --- a/lib/services/http_service/cloudflare/cookie.g.dart +++ b/lib/services/http_service/cloudflare/cookie.g.dart @@ -117,4 +117,5 @@ class SetCookieProvider extends AutoDisposeFutureProvider { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/http_service/cloudflare/providers/cookie_providers.g.dart b/lib/services/http_service/cloudflare/providers/cookie_providers.g.dart index d1eb213..3808a06 100644 --- a/lib/services/http_service/cloudflare/providers/cookie_providers.g.dart +++ b/lib/services/http_service/cloudflare/providers/cookie_providers.g.dart @@ -122,4 +122,5 @@ class CookieStateProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/search_manga.g.dart b/lib/services/search_manga.g.dart index 45bc52e..8eadcad 100644 --- a/lib/services/search_manga.g.dart +++ b/lib/services/search_manga.g.dart @@ -6,7 +6,7 @@ part of 'search_manga.dart'; // RiverpodGenerator // ************************************************************************** -String _$searchMangaHash() => r'8c34c40c6eb8f8145d8d12bd3447e5ae4462ed00'; +String _$searchMangaHash() => r'381a7a67b818f1633df476a4392412b7757030da'; /// Copied from Dart SDK class _SystemHash { @@ -126,4 +126,5 @@ class SearchMangaProvider extends AutoDisposeFutureProvider> { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/trackers/anilist.g.dart b/lib/services/trackers/anilist.g.dart index 4404e9a..d305850 100644 --- a/lib/services/trackers/anilist.g.dart +++ b/lib/services/trackers/anilist.g.dart @@ -134,4 +134,5 @@ class AnilistProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/services/trackers/myanimelist.g.dart b/lib/services/trackers/myanimelist.g.dart index 73503bf..d1ed50c 100644 --- a/lib/services/trackers/myanimelist.g.dart +++ b/lib/services/trackers/myanimelist.g.dart @@ -135,4 +135,5 @@ class MyAnimeListProvider ); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/lib/utils/constant.dart b/lib/utils/constant.dart index fde0946..e1bf80f 100644 --- a/lib/utils/constant.dart +++ b/lib/utils/constant.dart @@ -57,8 +57,8 @@ TrackStatus toStatus(TrackStatus status, bool isManga, int syncId) { (String, String) trackInfos(int id) { return switch (id) { - 1 => ("assets/tracker_mal.webp", "MyAnimeList"), - _ => ("assets/tracker_anilist.webp", "Anilist"), + 1 => ("assets/trackers_icons/tracker_mal.webp", "MyAnimeList"), + _ => ("assets/trackers_icons/tracker_anilist.webp", "Anilist"), }; } diff --git a/lib/utils/headers.g.dart b/lib/utils/headers.g.dart index 6bfe56e..92e6af0 100644 --- a/lib/utils/headers.g.dart +++ b/lib/utils/headers.g.dart @@ -117,4 +117,5 @@ class HeadersProvider extends AutoDisposeProvider> { return _SystemHash.finish(hash); } } -// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..96d3fee 100644 --- a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "info": { + "version": 1, + "author": "xcode" }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" + } + ] +} \ No newline at end of file diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 82b6f9d..ca5a8a9 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 13b35eb..bf6971d 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 0a3f5fa..a71ea06 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bdb5722..e496896 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index f083318..976efd0 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index 326c0e7..556dec3 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 2f1632c..4b84e96 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/pubspec.lock b/pubspec.lock index a805d1b..dbba605 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -494,6 +494,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index eb779a1..aa85e45 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -63,7 +63,7 @@ dev_dependencies: sdk: flutter build_runner: ^2.4.5 riverpod_generator: ^2.2.3 - # flutter_launcher_icons: ^0.13.1 + flutter_launcher_icons: ^0.13.1 isar_generator: 3.1.0+1 flutter_lints: ^2.0.1 @@ -73,4 +73,15 @@ flutter: assets: - assets/ - \ No newline at end of file +flutter_launcher_icons: + android: "launcher_icon" + ios: true + remove_alpha_ios: true + image_path: "assets/app_icons/icon-red.png" + min_sdk_android: 24 + windows: + generate: true + image_path: "assets/app_icons/icon-red.png" + macos: + generate: true + image_path: "assets/app_icons/icon-red.png" \ No newline at end of file diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico index 7624a8e..1664950 100644 Binary files a/windows/runner/resources/app_icon.ico and b/windows/runner/resources/app_icon.ico differ