diff --git a/lib/modules/library/library_screen.dart b/lib/modules/library/library_screen.dart index c53474d..b565834 100644 --- a/lib/modules/library/library_screen.dart +++ b/lib/modules/library/library_screen.dart @@ -32,6 +32,7 @@ import 'package:mangayomi/modules/manga/detail/widgets/chapter_filter_list_tile_ import 'package:mangayomi/modules/manga/detail/widgets/chapter_sort_list_tile_widget.dart'; import 'package:mangayomi/modules/widgets/error_text.dart'; import 'package:mangayomi/modules/widgets/progress_center.dart'; +import 'package:mangayomi/utils/global_style.dart'; class LibraryScreen extends ConsumerStatefulWidget { final bool isManga; @@ -1808,37 +1809,41 @@ class _LibraryScreenState extends ConsumerState Icons.filter_list_sharp, color: isNotFiltering ? null : Colors.yellow, )), - PopupMenuButton(itemBuilder: (context) { - return [ - PopupMenuItem( - value: 0, - child: Text(context.l10n.update_library), - ), - PopupMenuItem( - value: 1, child: Text(l10n.open_random_entry)), - PopupMenuItem(value: 2, child: Text(l10n.import)), - ]; - }, onSelected: (value) { - if (value == 0) { - manga.whenData((value) { - _updateLibrary(value); - }); - } else if (value == 1) { - manga.whenData((value) { - var randomManga = (value..shuffle()).first; - pushToMangaReaderDetail( - archiveId: randomManga.isLocalArchive ?? false - ? randomManga.id - : null, - context: context, - lang: randomManga.lang!, - mangaM: randomManga, - source: randomManga.source!); - }); - } else { - _importLocal(context, widget.isManga); - } - }), + PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, + itemBuilder: (context) { + return [ + PopupMenuItem( + value: 0, + child: Text(context.l10n.update_library), + ), + PopupMenuItem( + value: 1, child: Text(l10n.open_random_entry)), + PopupMenuItem( + value: 2, child: Text(l10n.import)), + ]; + }, + onSelected: (value) { + if (value == 0) { + manga.whenData((value) { + _updateLibrary(value); + }); + } else if (value == 1) { + manga.whenData((value) { + var randomManga = (value..shuffle()).first; + pushToMangaReaderDetail( + archiveId: randomManga.isLocalArchive ?? false + ? randomManga.id + : null, + context: context, + lang: randomManga.lang!, + mangaM: randomManga, + source: randomManga.source!); + }); + } else { + _importLocal(context, widget.isManga); + } + }), ], )); } diff --git a/lib/modules/manga/detail/manga_detail_view.dart b/lib/modules/manga/detail/manga_detail_view.dart index 20bf788..09f2e0a 100644 --- a/lib/modules/manga/detail/manga_detail_view.dart +++ b/lib/modules/manga/detail/manga_detail_view.dart @@ -31,6 +31,7 @@ import 'package:mangayomi/sources/utils/utils.dart'; import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/extensions/others.dart'; +import 'package:mangayomi/utils/global_style.dart'; import 'package:mangayomi/utils/headers.dart'; import 'package:mangayomi/modules/manga/detail/providers/isar_providers.dart'; import 'package:mangayomi/modules/manga/detail/providers/state_providers.dart'; @@ -369,6 +370,7 @@ class _MangaDetailViewState extends ConsumerState actions: [ if (!isLocalArchive) ...[ PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, icon: const Icon(Icons.download_outlined), itemBuilder: (context) { return [ @@ -480,39 +482,44 @@ class _MangaDetailViewState extends ConsumerState color: isNotFiltering ? null : Colors.yellow, )), - PopupMenuButton(itemBuilder: (context) { - return [ - if (!isLocalArchive) - PopupMenuItem( - value: 3, child: Text(l10n.refresh)), - if (widget.manga!.favorite!) - PopupMenuItem( - value: 0, - child: Text(l10n.edit_categories)), - if (!isLocalArchive) - PopupMenuItem( - value: 2, child: Text(l10n.share)), - ]; - }, onSelected: (value) { - if (value == 3) { - widget.checkForUpdate(true); - } - if (value == 0) { - context.push("/categories", extra: ( - true, - widget.manga!.isManga! ? 0 : 1 - )); - } else if (value == 1) { - } else if (value == 2) { - final source = getSource(widget.manga!.lang!, - widget.manga!.source!); - String url = source!.apiUrl!.isEmpty - ? widget.manga!.link! - : "${source.baseUrl}${widget.manga!.link!}"; + PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, + itemBuilder: (context) { + return [ + if (!isLocalArchive) + PopupMenuItem( + value: 3, + child: Text(l10n.refresh)), + if (widget.manga!.favorite!) + PopupMenuItem( + value: 0, + child: Text(l10n.edit_categories)), + if (!isLocalArchive) + PopupMenuItem( + value: 2, child: Text(l10n.share)), + ]; + }, + onSelected: (value) { + if (value == 3) { + widget.checkForUpdate(true); + } + if (value == 0) { + context.push("/categories", extra: ( + true, + widget.manga!.isManga! ? 0 : 1 + )); + } else if (value == 1) { + } else if (value == 2) { + final source = getSource( + widget.manga!.lang!, + widget.manga!.source!); + String url = source!.apiUrl!.isEmpty + ? widget.manga!.link! + : "${source.baseUrl}${widget.manga!.link!}"; - Share.share(url); - } - }), + Share.share(url); + } + }), ], ); }, @@ -1756,6 +1763,7 @@ class _MangaDetailViewState extends ConsumerState child: Icon(Icons.save_outlined), )), PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, itemBuilder: (context) { return [ if (widget.manga!.customCoverImage != diff --git a/lib/modules/manga/download/download_page_widget.dart b/lib/modules/manga/download/download_page_widget.dart index 8741668..fb3f39d 100644 --- a/lib/modules/manga/download/download_page_widget.dart +++ b/lib/modules/manga/download/download_page_widget.dart @@ -11,6 +11,7 @@ import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/providers/storage_provider.dart'; import 'package:mangayomi/modules/manga/download/providers/download_provider.dart'; +import 'package:mangayomi/utils/global_style.dart'; import 'package:share_plus/share_plus.dart'; class ChapterPageDownload extends ConsumerStatefulWidget { @@ -112,6 +113,7 @@ class _ChapterPageDownloadState extends ConsumerState final entries = snapshot.data!; return entries.first.isDownload! ? PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, child: Icon( size: 25, Icons.check_circle, @@ -136,6 +138,7 @@ class _ChapterPageDownloadState extends ConsumerState height: 41, width: 35, child: PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, child: _downloadWidget(context, true), onSelected: (value) { if (value == 0) { @@ -160,6 +163,7 @@ class _ChapterPageDownloadState extends ConsumerState height: 41, width: 35, child: PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, child: Stack( children: [ Align( @@ -243,6 +247,7 @@ class _ChapterPageDownloadState extends ConsumerState height: 50, width: 50, child: PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, child: const Icon( Icons.error_outline_outlined, color: Colors.red, @@ -268,6 +273,7 @@ class _ChapterPageDownloadState extends ConsumerState height: 50, width: 50, child: PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, child: _downloadWidget(context, true), onSelected: (value) { if (value == 0) { diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index 087de0e..4739492 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -29,6 +29,7 @@ import 'package:mangayomi/modules/manga/reader/providers/push_router.dart'; import 'package:mangayomi/services/get_chapter_pages.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/extensions/others.dart'; +import 'package:mangayomi/utils/global_style.dart'; import 'package:mangayomi/utils/headers.dart'; import 'package:mangayomi/modules/manga/reader/image_view_center.dart'; import 'package:mangayomi/modules/manga/reader/image_view_vertical.dart'; @@ -1632,6 +1633,7 @@ class _MangaChapterPageGalleryState mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, color: Colors.black, child: const Icon( Icons.app_settings_alt_outlined, @@ -2382,6 +2384,7 @@ class CustomPopupMenuButton extends StatelessWidget { return Padding( padding: const EdgeInsets.symmetric(vertical: 10), child: PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, tooltip: "", offset: Offset.fromDirection(1), color: Colors.black, diff --git a/lib/modules/more/download_queue/download_queue_screen.dart b/lib/modules/more/download_queue/download_queue_screen.dart index f810986..c0a04e4 100644 --- a/lib/modules/more/download_queue/download_queue_screen.dart +++ b/lib/modules/more/download_queue/download_queue_screen.dart @@ -7,6 +7,7 @@ import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; +import 'package:mangayomi/utils/global_style.dart'; class DownloadQueueScreen extends ConsumerWidget { const DownloadQueueScreen({super.key}); @@ -118,6 +119,7 @@ class DownloadQueueScreen extends ConsumerWidget { Padding( padding: const EdgeInsets.all(8.0), child: PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, child: const Icon(Icons.more_vert), onSelected: (value) async { if (value.toString() == 'Cancel') { diff --git a/lib/modules/webview/webview.dart b/lib/modules/webview/webview.dart index a06cebf..1a4825e 100644 --- a/lib/modules/webview/webview.dart +++ b/lib/modules/webview/webview.dart @@ -7,6 +7,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_windows_webview/flutter_windows_webview.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/services/http/interceptor.dart'; +import 'package:mangayomi/utils/global_style.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:share_plus/share_plus.dart'; import 'package:path/path.dart' as p; @@ -175,29 +176,33 @@ class _MangaWebViewState extends ConsumerState { } : null, ), - PopupMenuButton(itemBuilder: (context) { - return [ - PopupMenuItem( - value: 0, child: Text(l10n!.refresh)), - PopupMenuItem( - value: 1, child: Text(l10n.share)), - PopupMenuItem( - value: 2, child: Text(l10n.open_in_browser)), - PopupMenuItem( - value: 3, child: Text(l10n.clear_cookie)), - ]; - }, onSelected: (value) async { - if (value == 0) { - _webViewController?.reload(); - } else if (value == 1) { - Share.share(_url); - } else if (value == 2) { - await InAppBrowser.openWithSystemBrowser( - url: Uri.parse(_url)); - } else if (value == 3) { - CookieManager.instance().deleteAllCookies(); - } - }), + PopupMenuButton( + popUpAnimationStyle: popupAnimationStyle, + itemBuilder: (context) { + return [ + PopupMenuItem( + value: 0, child: Text(l10n!.refresh)), + PopupMenuItem( + value: 1, child: Text(l10n.share)), + PopupMenuItem( + value: 2, + child: Text(l10n.open_in_browser)), + PopupMenuItem( + value: 3, child: Text(l10n.clear_cookie)), + ]; + }, + onSelected: (value) async { + if (value == 0) { + _webViewController?.reload(); + } else if (value == 1) { + Share.share(_url); + } else if (value == 2) { + await InAppBrowser.openWithSystemBrowser( + url: Uri.parse(_url)); + } else if (value == 3) { + CookieManager.instance().deleteAllCookies(); + } + }), ], ), ), diff --git a/lib/utils/global_style.dart b/lib/utils/global_style.dart new file mode 100644 index 0000000..8e6af4f --- /dev/null +++ b/lib/utils/global_style.dart @@ -0,0 +1,4 @@ +import 'package:flutter/material.dart'; + +final popupAnimationStyle = + AnimationStyle(curve: Curves.easeInOutCubicEmphasized);