brought back enabled adapter

This commit is contained in:
Vadim 2025-08-11 12:04:58 +02:00
parent a7c0282e5a
commit 709d19bb73
2 changed files with 20 additions and 12 deletions

View file

@ -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,

View file

@ -11,6 +11,7 @@ class DialogSwitch<T> extends StatefulWidget {
final Map<T, bool> values;
final StringAdapter<T> titleAdapter;
final StringAdapter<T>? subtitleAdapter;
final bool Function(T value)? enabledAdapter;
final ValueChanged<Map<T, bool>> onSave;
const DialogSwitch({
@ -20,6 +21,7 @@ class DialogSwitch<T> extends StatefulWidget {
required this.values,
required this.titleAdapter,
this.subtitleAdapter,
this.enabledAdapter,
required this.onSave,
super.key,
});
@ -54,21 +56,20 @@ class _DialogSwitchState<T> extends State<DialogSwitch<T>> {
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(),