mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-21 16:01:58 +00:00
improve custom navigation settings
This commit is contained in:
parent
3eeb4777a6
commit
00b2e5fa31
4 changed files with 100 additions and 72 deletions
|
|
@ -1,6 +1,9 @@
|
||||||
PODS:
|
PODS:
|
||||||
- audio_session (0.0.1):
|
- audio_session (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- connectivity_plus (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- FlutterMacOS
|
||||||
- DKImagePickerController/Core (4.3.4):
|
- DKImagePickerController/Core (4.3.4):
|
||||||
- DKImagePickerController/ImageDataManager
|
- DKImagePickerController/ImageDataManager
|
||||||
- DKImagePickerController/Resource
|
- DKImagePickerController/Resource
|
||||||
|
|
@ -93,6 +96,7 @@ PODS:
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
|
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
|
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
|
||||||
|
|
@ -127,6 +131,8 @@ SPEC REPOS:
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
audio_session:
|
audio_session:
|
||||||
:path: ".symlinks/plugins/audio_session/ios"
|
:path: ".symlinks/plugins/audio_session/ios"
|
||||||
|
connectivity_plus:
|
||||||
|
:path: ".symlinks/plugins/connectivity_plus/darwin"
|
||||||
file_picker:
|
file_picker:
|
||||||
:path: ".symlinks/plugins/file_picker/ios"
|
:path: ".symlinks/plugins/file_picker/ios"
|
||||||
Flutter:
|
Flutter:
|
||||||
|
|
@ -174,6 +180,7 @@ EXTERNAL SOURCES:
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
audio_session: f08db0697111ac84ba46191b55488c0563bb29c6
|
audio_session: f08db0697111ac84ba46191b55488c0563bb29c6
|
||||||
|
connectivity_plus: 2256d3e20624a7749ed21653aafe291a46446fee
|
||||||
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
||||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||||
file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517
|
file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import 'package:go_router/go_router.dart';
|
||||||
import 'package:google_fonts/google_fonts.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/app_font_family.dart';
|
||||||
import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_state_provider.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/providers/l10n_providers.dart';
|
||||||
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
||||||
import 'package:mangayomi/utils/date.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<CustomNavigationSettings> createState() =>
|
|
||||||
_CustomNavigationSettingsState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _CustomNavigationSettingsState
|
|
||||||
extends ConsumerState<CustomNavigationSettings> {
|
|
||||||
@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);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -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<CustomNavigationSettings> createState() =>
|
||||||
|
_CustomNavigationSettingsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CustomNavigationSettingsState
|
||||||
|
extends ConsumerState<CustomNavigationSettings> {
|
||||||
|
@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);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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/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/create_backup.dart';
|
||||||
import 'package:mangayomi/modules/more/data_and_storage/data_and_storage.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/novel/novel_reader_view.dart';
|
||||||
import 'package:mangayomi/modules/updates/updates_screen.dart';
|
import 'package:mangayomi/modules/updates/updates_screen.dart';
|
||||||
import 'package:mangayomi/modules/more/categories/categories_screen.dart';
|
import 'package:mangayomi/modules/more/categories/categories_screen.dart';
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue