mirror of
https://github.com/immich-app/immich.git
synced 2025-12-22 01:11:20 +03:00
feat(mobile): Auto switching server URLs (#14437)
This commit is contained in:
@@ -8,36 +8,69 @@ import 'package:immich_mobile/widgets/settings/asset_list_settings/asset_list_se
|
||||
import 'package:immich_mobile/widgets/settings/asset_viewer_settings/asset_viewer_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/backup_settings/backup_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/language_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/networking_settings/networking_settings.dart';
|
||||
import 'package:immich_mobile/widgets/settings/notification_setting.dart';
|
||||
import 'package:immich_mobile/widgets/settings/preference_settings/preference_setting.dart';
|
||||
import 'package:immich_mobile/routing/router.dart';
|
||||
|
||||
enum SettingSection {
|
||||
advanced(
|
||||
'advanced_settings_tile_title',
|
||||
Icons.build_outlined,
|
||||
"advanced_settings_tile_subtitle",
|
||||
),
|
||||
assetViewer(
|
||||
'asset_viewer_settings_title',
|
||||
Icons.image_outlined,
|
||||
"asset_viewer_settings_subtitle",
|
||||
),
|
||||
backup(
|
||||
'backup_controller_page_backup',
|
||||
Icons.cloud_upload_outlined,
|
||||
"backup_setting_subtitle",
|
||||
),
|
||||
languages(
|
||||
'setting_languages_title',
|
||||
Icons.language,
|
||||
"setting_languages_subtitle",
|
||||
),
|
||||
networking(
|
||||
'networking_settings',
|
||||
Icons.wifi,
|
||||
"networking_subtitle",
|
||||
),
|
||||
notifications(
|
||||
'setting_notifications_title',
|
||||
Icons.notifications_none_rounded,
|
||||
"setting_notifications_subtitle",
|
||||
),
|
||||
languages('setting_languages_title', Icons.language),
|
||||
preferences('preferences_settings_title', Icons.interests_outlined),
|
||||
backup('backup_controller_page_backup', Icons.cloud_upload_outlined),
|
||||
timeline('asset_list_settings_title', Icons.auto_awesome_mosaic_outlined),
|
||||
viewer('asset_viewer_settings_title', Icons.image_outlined),
|
||||
advanced('advanced_settings_tile_title', Icons.build_outlined);
|
||||
preferences(
|
||||
'preferences_settings_title',
|
||||
Icons.interests_outlined,
|
||||
"preferences_settings_subtitle",
|
||||
),
|
||||
timeline(
|
||||
'asset_list_settings_title',
|
||||
Icons.auto_awesome_mosaic_outlined,
|
||||
"asset_list_settings_subtitle",
|
||||
);
|
||||
|
||||
final String title;
|
||||
final String subtitle;
|
||||
final IconData icon;
|
||||
|
||||
Widget get widget => switch (this) {
|
||||
SettingSection.notifications => const NotificationSetting(),
|
||||
SettingSection.languages => const LanguageSettings(),
|
||||
SettingSection.preferences => const PreferenceSetting(),
|
||||
SettingSection.backup => const BackupSettings(),
|
||||
SettingSection.timeline => const AssetListSettings(),
|
||||
SettingSection.viewer => const AssetViewerSettings(),
|
||||
SettingSection.advanced => const AdvancedSettings(),
|
||||
SettingSection.assetViewer => const AssetViewerSettings(),
|
||||
SettingSection.backup => const BackupSettings(),
|
||||
SettingSection.languages => const LanguageSettings(),
|
||||
SettingSection.networking => const NetworkingSettings(),
|
||||
SettingSection.notifications => const NotificationSetting(),
|
||||
SettingSection.preferences => const PreferenceSetting(),
|
||||
SettingSection.timeline => const AssetListSettings(),
|
||||
};
|
||||
|
||||
const SettingSection(this.title, this.icon);
|
||||
const SettingSection(this.title, this.icon, this.subtitle);
|
||||
}
|
||||
|
||||
@RoutePage()
|
||||
@@ -61,22 +94,50 @@ class _MobileLayout extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(
|
||||
physics: const ClampingScrollPhysics(),
|
||||
padding: const EdgeInsets.symmetric(vertical: 10.0),
|
||||
children: SettingSection.values
|
||||
.map(
|
||||
(s) => ListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.symmetric(vertical: 2.0, horizontal: 16.0),
|
||||
leading: Icon(s.icon),
|
||||
title: Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0),
|
||||
child: Text(
|
||||
s.title,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
).tr(),
|
||||
(setting) => Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
),
|
||||
child: Card(
|
||||
elevation: 0,
|
||||
clipBehavior: Clip.antiAlias,
|
||||
color: context.colorScheme.surfaceContainer,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(16)),
|
||||
),
|
||||
margin: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
child: ListTile(
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
),
|
||||
leading: Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
||||
color: context.isDarkTheme
|
||||
? Colors.black26
|
||||
: Colors.white.withAlpha(100),
|
||||
),
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Icon(setting.icon, color: context.primaryColor),
|
||||
),
|
||||
title: Text(
|
||||
setting.title,
|
||||
style: context.textTheme.titleMedium!.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: context.primaryColor,
|
||||
),
|
||||
).tr(),
|
||||
subtitle: Text(
|
||||
setting.subtitle,
|
||||
).tr(),
|
||||
onTap: () =>
|
||||
context.pushRoute(SettingsSubRoute(section: setting)),
|
||||
),
|
||||
),
|
||||
onTap: () => context.pushRoute(SettingsSubRoute(section: s)),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
|
||||
Reference in New Issue
Block a user