diff --git a/ios/Podfile.lock b/ios/Podfile.lock index dbe448a9..aa02ece1 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,6 +1,9 @@ PODS: - audio_session (0.0.1): - Flutter + - connectivity_plus (0.0.1): + - Flutter + - FlutterMacOS - DKImagePickerController/Core (4.3.4): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource @@ -93,6 +96,7 @@ PODS: DEPENDENCIES: - audio_session (from `.symlinks/plugins/audio_session/ios`) + - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) @@ -127,6 +131,8 @@ SPEC REPOS: EXTERNAL SOURCES: audio_session: :path: ".symlinks/plugins/audio_session/ios" + connectivity_plus: + :path: ".symlinks/plugins/connectivity_plus/darwin" file_picker: :path: ".symlinks/plugins/file_picker/ios" Flutter: @@ -174,6 +180,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: audio_session: f08db0697111ac84ba46191b55488c0563bb29c6 + connectivity_plus: 2256d3e20624a7749ed21653aafe291a46446fee DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517 diff --git a/lib/modules/more/settings/appearance/appearance_screen.dart b/lib/modules/more/settings/appearance/appearance_screen.dart index 2f745fe6..526abb3d 100644 --- a/lib/modules/more/settings/appearance/appearance_screen.dart +++ b/lib/modules/more/settings/appearance/appearance_screen.dart @@ -4,7 +4,6 @@ import 'package:go_router/go_router.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:mangayomi/modules/more/settings/appearance/providers/app_font_family.dart'; import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_state_provider.dart'; -import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/date.dart'; @@ -469,74 +468,3 @@ class AppearanceScreen extends ConsumerWidget { ); } } - -class CustomNavigationSettings extends ConsumerStatefulWidget { - const CustomNavigationSettings({super.key}); - - @override - ConsumerState createState() => - _CustomNavigationSettingsState(); -} - -class _CustomNavigationSettingsState - extends ConsumerState { - @override - Widget build(BuildContext context) { - final l10n = l10nLocalizations(context); - final navigationOrder = ref.watch(navigationOrderStateProvider); - final hideItems = ref.watch(hideItemsStateProvider); - return Scaffold( - appBar: AppBar( - title: Text(l10n!.reorder_navigation), - ), - body: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20), - child: ReorderableListView.builder( - shrinkWrap: true, - itemCount: navigationOrder.length, - itemBuilder: (context, index) { - final navigation = navigationOrder[index]; - return SwitchListTile.adaptive( - key: Key(navigation), - dense: true, - contentPadding: const EdgeInsets.only(left: 0, right: 40), - value: !hideItems.contains(navigation), - onChanged: navigation == "/more" - ? null - : (value) { - final temp = hideItems.toList(); - if (!value && !hideItems.contains(navigation)) { - temp.add(navigation); - } else if (value) { - temp.remove(navigation); - } - ref.read(hideItemsStateProvider.notifier).set(temp); - }, - title: Text(navigationItems[navigation]!), - ); - }, - onReorder: (oldIndex, newIndex) { - if (oldIndex < newIndex) { - final draggedItem = navigationOrder[oldIndex]; - for (var i = oldIndex; i < newIndex - 1; i++) { - navigationOrder[i] = navigationOrder[i + 1]; - } - navigationOrder[newIndex - 1] = draggedItem; - } else { - final draggedItem = navigationOrder[oldIndex]; - for (var i = oldIndex; i > newIndex; i--) { - navigationOrder[i] = navigationOrder[i - 1]; - } - navigationOrder[newIndex] = draggedItem; - } - ref - .read(navigationOrderStateProvider.notifier) - .set(navigationOrder); - }, - ), - ), - ), - ); - } -} diff --git a/lib/modules/more/settings/appearance/custom_navigation_settings.dart b/lib/modules/more/settings/appearance/custom_navigation_settings.dart new file mode 100644 index 00000000..811c574b --- /dev/null +++ b/lib/modules/more/settings/appearance/custom_navigation_settings.dart @@ -0,0 +1,92 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:mangayomi/modules/more/settings/appearance/appearance_screen.dart'; +import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart'; +import 'package:mangayomi/providers/l10n_providers.dart'; + +class CustomNavigationSettings extends ConsumerStatefulWidget { + const CustomNavigationSettings({super.key}); + + @override + ConsumerState createState() => + _CustomNavigationSettingsState(); +} + +class _CustomNavigationSettingsState + extends ConsumerState { + @override + Widget build(BuildContext context) { + final l10n = context.l10n; + final navigationOrder = ref.watch(navigationOrderStateProvider); + final hideItems = ref.watch(hideItemsStateProvider); + final isMobile = Platform.isAndroid || Platform.isIOS; + return Scaffold( + appBar: AppBar( + title: Text(l10n.reorder_navigation), + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: ReorderableListView.builder( + shrinkWrap: true, + itemCount: navigationOrder.length, + itemBuilder: (context, index) { + final navigation = navigationOrder[index]; + return Row( + key: Key('navigation_$navigation'), + children: [ + if (isMobile) Icon(Icons.drag_handle), + Expanded( + child: SwitchListTile.adaptive( + key: Key(navigation), + dense: true, + contentPadding: isMobile + ? null + : const EdgeInsets.only(left: 0, right: 40), + value: !hideItems.contains(navigation), + onChanged: ["/more", "/browse", "/history"] + .any((element) => element == navigation) + ? null + : (value) { + final temp = hideItems.toList(); + if (!value && !hideItems.contains(navigation)) { + temp.add(navigation); + } else if (value) { + temp.remove(navigation); + } + ref + .read(hideItemsStateProvider.notifier) + .set(temp); + }, + title: Text(navigationItems[navigation]!), + ), + ), + ], + ); + }, + onReorder: (oldIndex, newIndex) { + if (oldIndex < newIndex) { + final draggedItem = navigationOrder[oldIndex]; + for (var i = oldIndex; i < newIndex - 1; i++) { + navigationOrder[i] = navigationOrder[i + 1]; + } + navigationOrder[newIndex - 1] = draggedItem; + } else { + final draggedItem = navigationOrder[oldIndex]; + for (var i = oldIndex; i > newIndex; i--) { + navigationOrder[i] = navigationOrder[i - 1]; + } + navigationOrder[newIndex] = draggedItem; + } + ref + .read(navigationOrderStateProvider.notifier) + .set(navigationOrder); + }, + ), + ), + ), + ); + } +} diff --git a/lib/router/router.dart b/lib/router/router.dart index 53a716bb..b99de925 100644 --- a/lib/router/router.dart +++ b/lib/router/router.dart @@ -12,6 +12,7 @@ import 'package:mangayomi/modules/browse/extension/widgets/create_extension.dart import 'package:mangayomi/modules/browse/sources/sources_filter_screen.dart'; import 'package:mangayomi/modules/more/data_and_storage/create_backup.dart'; import 'package:mangayomi/modules/more/data_and_storage/data_and_storage.dart'; +import 'package:mangayomi/modules/more/settings/appearance/custom_navigation_settings.dart'; import 'package:mangayomi/modules/novel/novel_reader_view.dart'; import 'package:mangayomi/modules/updates/updates_screen.dart'; import 'package:mangayomi/modules/more/categories/categories_screen.dart';