mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	* chore: added overpass font * Setting page * style: app bar dialog * style: backup controller and album selection page * style: asset grid * blanket fix * blanket fix * remove description input for local only asset * revert * merge main * style: search page * sharing page * text size in sharing page * style: library page * library page * album page + album creation page * Navigationbar * style: minor * update * album bottom sheet * album option page * minor style fix * remove unused fonts * remove fonts in pubspec
		
			
				
	
	
		
			225 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:easy_localization/easy_localization.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
						|
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
 | 
						|
import 'package:immich_mobile/modules/map/providers/map_state.provider.dart';
 | 
						|
 | 
						|
class MapSettingsDialog extends HookConsumerWidget {
 | 
						|
  const MapSettingsDialog({super.key});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context, WidgetRef ref) {
 | 
						|
    final mapSettingsNotifier = ref.read(mapStateNotifier.notifier);
 | 
						|
    final mapSettings = ref.read(mapStateNotifier);
 | 
						|
    final isDarkMode = useState(mapSettings.isDarkTheme);
 | 
						|
    final showFavoriteOnly = useState(mapSettings.showFavoriteOnly);
 | 
						|
    final showIncludeArchived = useState(mapSettings.includeArchived);
 | 
						|
    final showRelativeDate = useState(mapSettings.relativeTime);
 | 
						|
    final ThemeData theme = context.themeData;
 | 
						|
 | 
						|
    Widget buildMapThemeSetting() {
 | 
						|
      return SwitchListTile.adaptive(
 | 
						|
        value: isDarkMode.value,
 | 
						|
        onChanged: (value) {
 | 
						|
          isDarkMode.value = value;
 | 
						|
        },
 | 
						|
        activeColor: theme.primaryColor,
 | 
						|
        dense: true,
 | 
						|
        title: Text(
 | 
						|
          "map_settings_dark_mode".tr(),
 | 
						|
          style:
 | 
						|
              theme.textTheme.labelLarge?.copyWith(fontWeight: FontWeight.bold),
 | 
						|
        ),
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    Widget buildFavoriteOnlySetting() {
 | 
						|
      return SwitchListTile.adaptive(
 | 
						|
        value: showFavoriteOnly.value,
 | 
						|
        onChanged: (value) {
 | 
						|
          showFavoriteOnly.value = value;
 | 
						|
        },
 | 
						|
        activeColor: theme.primaryColor,
 | 
						|
        dense: true,
 | 
						|
        title: Text(
 | 
						|
          "map_settings_only_show_favorites".tr(),
 | 
						|
          style:
 | 
						|
              theme.textTheme.labelLarge?.copyWith(fontWeight: FontWeight.bold),
 | 
						|
        ),
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    Widget buildIncludeArchivedSetting() {
 | 
						|
      return SwitchListTile.adaptive(
 | 
						|
        value: showIncludeArchived.value,
 | 
						|
        onChanged: (value) {
 | 
						|
          showIncludeArchived.value = value;
 | 
						|
        },
 | 
						|
        activeColor: theme.primaryColor,
 | 
						|
        dense: true,
 | 
						|
        title: Text(
 | 
						|
          "map_settings_include_show_archived".tr(),
 | 
						|
          style:
 | 
						|
              theme.textTheme.labelLarge?.copyWith(fontWeight: FontWeight.bold),
 | 
						|
        ),
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    Widget buildDateRangeSetting() {
 | 
						|
      final now = DateTime.now();
 | 
						|
      return DropdownMenu(
 | 
						|
        enableSearch: false,
 | 
						|
        enableFilter: false,
 | 
						|
        initialSelection: showRelativeDate.value,
 | 
						|
        onSelected: (value) {
 | 
						|
          showRelativeDate.value = value!;
 | 
						|
        },
 | 
						|
        dropdownMenuEntries: [
 | 
						|
          DropdownMenuEntry(
 | 
						|
            value: 0,
 | 
						|
            label: "map_settings_date_range_option_all".tr(),
 | 
						|
          ),
 | 
						|
          DropdownMenuEntry(
 | 
						|
            value: 1,
 | 
						|
            label: "map_settings_date_range_option_days".plural(1),
 | 
						|
          ),
 | 
						|
          DropdownMenuEntry(
 | 
						|
            value: 7,
 | 
						|
            label: "map_settings_date_range_option_days".plural(7),
 | 
						|
          ),
 | 
						|
          DropdownMenuEntry(
 | 
						|
            value: 30,
 | 
						|
            label: "map_settings_date_range_option_days".plural(30),
 | 
						|
          ),
 | 
						|
          DropdownMenuEntry(
 | 
						|
            value: now
 | 
						|
                .difference(
 | 
						|
                  DateTime(
 | 
						|
                    now.year - 1,
 | 
						|
                    now.month,
 | 
						|
                    now.day,
 | 
						|
                    now.hour,
 | 
						|
                    now.minute,
 | 
						|
                    now.second,
 | 
						|
                  ),
 | 
						|
                )
 | 
						|
                .inDays,
 | 
						|
            label: "map_settings_date_range_option_years".plural(1),
 | 
						|
          ),
 | 
						|
          DropdownMenuEntry(
 | 
						|
            value: now
 | 
						|
                .difference(
 | 
						|
                  DateTime(
 | 
						|
                    now.year - 3,
 | 
						|
                    now.month,
 | 
						|
                    now.day,
 | 
						|
                    now.hour,
 | 
						|
                    now.minute,
 | 
						|
                    now.second,
 | 
						|
                  ),
 | 
						|
                )
 | 
						|
                .inDays,
 | 
						|
            label: "map_settings_date_range_option_years".plural(3),
 | 
						|
          ),
 | 
						|
        ],
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    List<Widget> getDialogActions() {
 | 
						|
      return <Widget>[
 | 
						|
        TextButton(
 | 
						|
          onPressed: () => context.pop(),
 | 
						|
          style: TextButton.styleFrom(
 | 
						|
            backgroundColor:
 | 
						|
                mapSettings.isDarkTheme ? Colors.grey[100] : Colors.grey[700],
 | 
						|
          ),
 | 
						|
          child: Padding(
 | 
						|
            padding: const EdgeInsets.symmetric(horizontal: 16.0),
 | 
						|
            child: Text(
 | 
						|
              "map_settings_dialog_cancel".tr(),
 | 
						|
              style: theme.textTheme.labelLarge?.copyWith(
 | 
						|
                fontWeight: FontWeight.w500,
 | 
						|
                color: mapSettings.isDarkTheme
 | 
						|
                    ? Colors.grey[900]
 | 
						|
                    : Colors.grey[100],
 | 
						|
              ),
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
        TextButton(
 | 
						|
          onPressed: () {
 | 
						|
            mapSettingsNotifier.switchTheme(isDarkMode.value);
 | 
						|
            mapSettingsNotifier.switchFavoriteOnly(showFavoriteOnly.value);
 | 
						|
            mapSettingsNotifier.setRelativeTime(showRelativeDate.value);
 | 
						|
            mapSettingsNotifier
 | 
						|
                .switchIncludeArchived(showIncludeArchived.value);
 | 
						|
            context.pop();
 | 
						|
          },
 | 
						|
          style: TextButton.styleFrom(
 | 
						|
            backgroundColor: theme.primaryColor,
 | 
						|
          ),
 | 
						|
          child: Padding(
 | 
						|
            padding: const EdgeInsets.symmetric(horizontal: 16.0),
 | 
						|
            child: Text(
 | 
						|
              "map_settings_dialog_save".tr(),
 | 
						|
              style: theme.textTheme.labelLarge?.copyWith(
 | 
						|
                fontWeight: FontWeight.w500,
 | 
						|
                color: theme.primaryTextTheme.labelLarge?.color,
 | 
						|
              ),
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ];
 | 
						|
    }
 | 
						|
 | 
						|
    return AlertDialog(
 | 
						|
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
 | 
						|
      title: Center(
 | 
						|
        child: Text(
 | 
						|
          "map_settings_dialog_title".tr(),
 | 
						|
          style: TextStyle(
 | 
						|
            color: theme.primaryColor,
 | 
						|
            fontWeight: FontWeight.bold,
 | 
						|
            fontSize: 18,
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
      content: SizedBox(
 | 
						|
        width: double.maxFinite,
 | 
						|
        child: ConstrainedBox(
 | 
						|
          constraints: BoxConstraints(
 | 
						|
            maxHeight: context.height * 0.6,
 | 
						|
          ),
 | 
						|
          child: ListView(
 | 
						|
            shrinkWrap: true,
 | 
						|
            children: [
 | 
						|
              buildMapThemeSetting(),
 | 
						|
              buildFavoriteOnlySetting(),
 | 
						|
              buildIncludeArchivedSetting(),
 | 
						|
              const SizedBox(
 | 
						|
                height: 10,
 | 
						|
              ),
 | 
						|
              Padding(
 | 
						|
                padding: const EdgeInsets.only(left: 20),
 | 
						|
                child: Column(
 | 
						|
                  crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                  children: [
 | 
						|
                    Text(
 | 
						|
                      "map_settings_only_relative_range".tr(),
 | 
						|
                      style: const TextStyle(fontWeight: FontWeight.bold),
 | 
						|
                    ),
 | 
						|
                    buildDateRangeSetting(),
 | 
						|
                  ],
 | 
						|
                ),
 | 
						|
              ),
 | 
						|
            ].toList(),
 | 
						|
          ),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
      actions: getDialogActions(),
 | 
						|
      actionsAlignment: MainAxisAlignment.spaceEvenly,
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |