diff --git a/lib/screens/settings/components/camera/camera_features/widget_list_tile_camera_features.dart b/lib/screens/settings/components/camera/camera_features/widget_list_tile_camera_features.dart index 6b5df80..f9687c2 100644 --- a/lib/screens/settings/components/camera/camera_features/widget_list_tile_camera_features.dart +++ b/lib/screens/settings/components/camera/camera_features/widget_list_tile_camera_features.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/data/models/camera_feature.dart'; import 'package:lightmeter/generated/l10n.dart'; +import 'package:lightmeter/providers/services_provider.dart'; import 'package:lightmeter/providers/user_preferences_provider.dart'; import 'package:lightmeter/screens/settings/components/shared/dialog_switch/widget_dialog_switch.dart'; import 'package:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart'; @@ -10,7 +11,7 @@ class CameraFeaturesListTile extends StatelessWidget { @override Widget build(BuildContext context) { - return IAPListTile( + return ListTile( leading: const Icon(Icons.camera_alt_outlined), title: Text(S.of(context).cameraFeatures), onTap: () { @@ -20,6 +21,12 @@ class CameraFeaturesListTile extends StatelessWidget { icon: Icons.camera_alt_outlined, title: S.of(context).cameraFeatures, values: UserPreferencesProvider.cameraConfigOf(context), + enabledAdapter: (feature) => switch (feature) { + CameraFeature.spotMetering => true, + CameraFeature.histogram => true, + CameraFeature.showFocalLength => + ServicesProvider.of(context).userPreferencesService.cameraFocalLength != null, + }, titleAdapter: (context, feature) => switch (feature) { CameraFeature.spotMetering => S.of(context).cameraFeatureSpotMetering, CameraFeature.histogram => S.of(context).cameraFeatureHistogram, diff --git a/lib/screens/settings/components/shared/dialog_switch/widget_dialog_switch.dart b/lib/screens/settings/components/shared/dialog_switch/widget_dialog_switch.dart index 5e8e726..56a66c0 100644 --- a/lib/screens/settings/components/shared/dialog_switch/widget_dialog_switch.dart +++ b/lib/screens/settings/components/shared/dialog_switch/widget_dialog_switch.dart @@ -11,6 +11,7 @@ class DialogSwitch extends StatefulWidget { final Map values; final StringAdapter titleAdapter; final StringAdapter? subtitleAdapter; + final bool Function(T value)? enabledAdapter; final ValueChanged> onSave; const DialogSwitch({ @@ -20,6 +21,7 @@ class DialogSwitch extends StatefulWidget { required this.values, required this.titleAdapter, this.subtitleAdapter, + this.enabledAdapter, required this.onSave, super.key, }); @@ -54,21 +56,20 @@ class _DialogSwitchState extends State> { shrinkWrap: true, children: _features.entries.map( (entry) { + final isEnabled = widget.enabledAdapter?.call(entry.key) ?? true; return SwitchListTile( contentPadding: EdgeInsets.symmetric(horizontal: Dimens.dialogTitlePadding.left), title: Text(widget.titleAdapter(context, entry.key)), - subtitle: widget.subtitleAdapter != null - ? Text( - widget.subtitleAdapter!.call(context, entry.key), - style: Theme.of(context).listTileTheme.subtitleTextStyle, - ) - : null, + subtitle: + widget.subtitleAdapter != null ? Text(widget.subtitleAdapter!.call(context, entry.key)) : null, value: _features[entry.key]!, - onChanged: (value) { - setState(() { - _features.update(entry.key, (_) => value); - }); - }, + onChanged: isEnabled + ? (value) { + setState(() { + _features.update(entry.key, (_) => value); + }); + } + : null, ); }, ).toList(),