From d479d62ec18443b78fb9565ccae874a9882bfeed Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Mon, 11 Sep 2023 22:46:16 +0200 Subject: [PATCH] separated `EquipmentSettingsSection` --- .../widget_list_tiles_equipments.dart | 0 .../widget_container_equipment_profile.dart | 4 +- .../widget_dialog_equipment_profile_name.dart | 0 .../screen_equipment_profile.dart | 4 +- .../widget_list_tile_equipment_profiles.dart | 27 ++++++++++++ .../films/widget_list_tile_films.dart | 37 ++++++++++++++++ .../widget_settings_section_equipment.dart | 26 +++++++++++ .../widget_list_tile_equipment_profiles.dart | 43 ------------------- .../widget_settings_section_metering.dart | 2 - .../iap_builder/widget_builder_iap.dart | 22 ++++++++++ .../widget_settings_section.dart | 35 ++++++++------- lib/screens/settings/screen_settings.dart | 2 + 12 files changed, 138 insertions(+), 64 deletions(-) rename lib/screens/settings/components/{metering => equipment}/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart (100%) rename lib/screens/settings/components/{metering => equipment}/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart (94%) rename lib/screens/settings/components/{metering => equipment}/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart (100%) rename lib/screens/settings/components/{metering => equipment}/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart (92%) create mode 100644 lib/screens/settings/components/equipment/components/equipment_profiles/widget_list_tile_equipment_profiles.dart create mode 100644 lib/screens/settings/components/equipment/components/films/widget_list_tile_films.dart create mode 100644 lib/screens/settings/components/equipment/widget_settings_section_equipment.dart delete mode 100644 lib/screens/settings/components/metering/components/equipment_profiles/widget_list_tile_equipment_profiles.dart create mode 100644 lib/screens/settings/components/shared/iap_builder/widget_builder_iap.dart diff --git a/lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart b/lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart similarity index 100% rename from lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart rename to lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart diff --git a/lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart b/lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart similarity index 94% rename from lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart rename to lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart index c11cd2c..244ddce 100644 --- a/lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart +++ b/lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart @@ -3,8 +3,8 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:lightmeter/res/dimens.dart'; -import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart'; -import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/equipment_list_tiles/widget_list_tiles_equipments.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; class EquipmentProfileContainer extends StatefulWidget { diff --git a/lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart b/lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart similarity index 100% rename from lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart rename to lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart diff --git a/lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart b/lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart similarity index 92% rename from lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart rename to lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart index 5307145..a5b0eca 100644 --- a/lib/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart +++ b/lib/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/res/dimens.dart'; -import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart'; -import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/widget_container_equipment_profile.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart'; import 'package:lightmeter/screens/shared/icon_placeholder/widget_icon_placeholder.dart'; import 'package:lightmeter/screens/shared/sliver_screen/screen_sliver.dart'; import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; diff --git a/lib/screens/settings/components/equipment/components/equipment_profiles/widget_list_tile_equipment_profiles.dart b/lib/screens/settings/components/equipment/components/equipment_profiles/widget_list_tile_equipment_profiles.dart new file mode 100644 index 0000000..09c2bf7 --- /dev/null +++ b/lib/screens/settings/components/equipment/components/equipment_profiles/widget_list_tile_equipment_profiles.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:lightmeter/generated/l10n.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart'; +import 'package:lightmeter/screens/settings/components/shared/iap_builder/widget_builder_iap.dart'; +import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; +import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; + +class EquipmentProfilesListTile extends StatelessWidget { + const EquipmentProfilesListTile({super.key}); + + @override + Widget build(BuildContext context) { + return IAPBuilder( + builder: (context, status) => ListTile( + leading: const Icon(Icons.camera), + title: Text(S.of(context).equipmentProfiles), + onTap: status == IAPProductStatus.purchased + ? () { + Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const EquipmentProfilesScreen()), + ); + } + : null, + ), + ); + } +} diff --git a/lib/screens/settings/components/equipment/components/films/widget_list_tile_films.dart b/lib/screens/settings/components/equipment/components/films/widget_list_tile_films.dart new file mode 100644 index 0000000..5f25f91 --- /dev/null +++ b/lib/screens/settings/components/equipment/components/films/widget_list_tile_films.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:lightmeter/data/models/film.dart'; +import 'package:lightmeter/generated/l10n.dart'; +import 'package:lightmeter/screens/settings/components/shared/dialog_filter/widget_dialog_filter.dart'; +import 'package:lightmeter/screens/settings/components/shared/iap_builder/widget_builder_iap.dart'; +import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; + +class FilmsListTile extends StatelessWidget { + const FilmsListTile({super.key}); + + @override + Widget build(BuildContext context) { + return IAPBuilder( + builder: (context, status) => ListTile( + leading: const Icon(Icons.camera_roll), + title: Text('Films in use'), + onTap: status == IAPProductStatus.purchased + ? () { + showDialog>( + context: context, + builder: (_) => DialogFilter( + icon: const Icon(Icons.camera_roll), + title: "Films in use", + description: "Deselect films that you are not using, so they will not appear in the film picker", + values: Film.values.sublist(1), + selectedValues: Film.values.sublist(1), + titleAdapter: (_, value) => value.name, + ), + ).then((values) { + if (values != null) {} + }); + } + : null, + ), + ); + } +} diff --git a/lib/screens/settings/components/equipment/widget_settings_section_equipment.dart b/lib/screens/settings/components/equipment/widget_settings_section_equipment.dart new file mode 100644 index 0000000..a44ed81 --- /dev/null +++ b/lib/screens/settings/components/equipment/widget_settings_section_equipment.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/equipment_profiles/widget_list_tile_equipment_profiles.dart'; +import 'package:lightmeter/screens/settings/components/equipment/components/films/widget_list_tile_films.dart'; +import 'package:lightmeter/screens/settings/components/shared/iap_builder/widget_builder_iap.dart'; +import 'package:lightmeter/screens/settings/components/shared/settings_section/widget_settings_section.dart'; +import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; + +class EquipmentSettingsSection extends StatelessWidget { + const EquipmentSettingsSection({super.key}); + + @override + Widget build(BuildContext context) { + return IAPBuilder( + builder: (context, status) { + return SettingsSection( + title: "Equipment", + children: const [ + EquipmentProfilesListTile(), + FilmsListTile(), + ], + enabled: status == IAPProductStatus.purchased, + ); + }, + ); + } +} diff --git a/lib/screens/settings/components/metering/components/equipment_profiles/widget_list_tile_equipment_profiles.dart b/lib/screens/settings/components/metering/components/equipment_profiles/widget_list_tile_equipment_profiles.dart deleted file mode 100644 index 774e215..0000000 --- a/lib/screens/settings/components/metering/components/equipment_profiles/widget_list_tile_equipment_profiles.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/material.dart'; -import 'package:lightmeter/generated/l10n.dart'; -import 'package:lightmeter/res/dimens.dart'; -import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/screen_equipment_profile.dart'; -import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; -import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; - -class EquipmentProfilesListTile extends StatelessWidget { - const EquipmentProfilesListTile({super.key}); - - @override - Widget build(BuildContext context) { - final paidStatus = IAPProducts.productOf(context, IAPProductType.paidFeatures)?.status ?? - IAPProductStatus.pending; - log(paidStatus.toString()); - return ListTile( - leading: const Icon(Icons.camera), - title: Text(S.of(context).equipmentProfiles), - onTap: switch (paidStatus) { - IAPProductStatus.purchased => () { - Navigator.of(context).push( - MaterialPageRoute(builder: (_) => const EquipmentProfilesScreen()), - ); - }, - IAPProductStatus.pending => null, - _ => () { - IAPProductsProvider.of(context).buy(IAPProductType.paidFeatures); - }, - }, - trailing: switch (paidStatus) { - IAPProductStatus.purchasable => const Icon(Icons.lock), - IAPProductStatus.pending => const SizedBox( - height: Dimens.grid24, - width: Dimens.grid24, - child: CircularProgressIndicator(), - ), - _ => null, - }, - ); - } -} diff --git a/lib/screens/settings/components/metering/widget_settings_section_metering.dart b/lib/screens/settings/components/metering/widget_settings_section_metering.dart index 9f86709..c5b9e1d 100644 --- a/lib/screens/settings/components/metering/widget_settings_section_metering.dart +++ b/lib/screens/settings/components/metering/widget_settings_section_metering.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/screens/settings/components/metering/components/calibration/widget_list_tile_calibration.dart'; -import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/widget_list_tile_equipment_profiles.dart'; import 'package:lightmeter/screens/settings/components/metering/components/fractional_stops/widget_list_tile_fractional_stops.dart'; import 'package:lightmeter/screens/settings/components/metering/components/metering_screen_layout/widget_list_tile_metering_screen_layout.dart'; import 'package:lightmeter/screens/settings/components/shared/settings_section/widget_settings_section.dart'; @@ -17,7 +16,6 @@ class MeteringSettingsSection extends StatelessWidget { StopTypeListTile(), CalibrationListTile(), MeteringScreenLayoutListTile(), - EquipmentProfilesListTile(), ], ); } diff --git a/lib/screens/settings/components/shared/iap_builder/widget_builder_iap.dart b/lib/screens/settings/components/shared/iap_builder/widget_builder_iap.dart new file mode 100644 index 0000000..ecb3b38 --- /dev/null +++ b/lib/screens/settings/components/shared/iap_builder/widget_builder_iap.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; +import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; + +class IAPBuilder extends StatelessWidget { + final IAPProductType product; + final Widget Function(BuildContext context, IAPProductStatus status) builder; + + const IAPBuilder({ + this.product = IAPProductType.paidFeatures, + required this.builder, + super.key, + }); + + @override + Widget build(BuildContext context) { + return builder( + context, + IAPProducts.productOf(context, IAPProductType.paidFeatures)?.status ?? + IAPProductStatus.pending, + ); + } +} diff --git a/lib/screens/settings/components/shared/settings_section/widget_settings_section.dart b/lib/screens/settings/components/shared/settings_section/widget_settings_section.dart index be62847..9f88d7d 100644 --- a/lib/screens/settings/components/shared/settings_section/widget_settings_section.dart +++ b/lib/screens/settings/components/shared/settings_section/widget_settings_section.dart @@ -4,10 +4,12 @@ import 'package:lightmeter/res/dimens.dart'; class SettingsSection extends StatelessWidget { final String title; final List children; + final bool enabled; const SettingsSection({ required this.title, required this.children, + this.enabled = true, super.key, }); @@ -23,22 +25,25 @@ class SettingsSection extends StatelessWidget { child: Card( child: Padding( padding: const EdgeInsets.symmetric(vertical: Dimens.paddingM), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), - child: Text( - title, - style: Theme.of(context) - .textTheme - .labelLarge - ?.copyWith(color: Theme.of(context).colorScheme.onSurface), + child: Opacity( + opacity: enabled ? Dimens.enabledOpacity : Dimens.disabledOpacity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), + child: Text( + title, + style: Theme.of(context) + .textTheme + .labelLarge + ?.copyWith(color: Theme.of(context).colorScheme.onSurface), + ), ), - ), - ...children, - ], + ...children, + ], + ), ), ), ), diff --git a/lib/screens/settings/screen_settings.dart b/lib/screens/settings/screen_settings.dart index 38256e8..7d057cf 100644 --- a/lib/screens/settings/screen_settings.dart +++ b/lib/screens/settings/screen_settings.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/screens/settings/components/about/widget_settings_section_about.dart'; +import 'package:lightmeter/screens/settings/components/equipment/widget_settings_section_equipment.dart'; import 'package:lightmeter/screens/settings/components/general/widget_settings_section_general.dart'; import 'package:lightmeter/screens/settings/components/metering/widget_settings_section_metering.dart'; import 'package:lightmeter/screens/settings/components/theme/widget_settings_section_theme.dart'; @@ -43,6 +44,7 @@ class _SettingsScreenState extends State { delegate: SliverChildListDelegate( [ const MeteringSettingsSection(), + const EquipmentSettingsSection(), const GeneralSettingsSection(), const ThemeSettingsSection(), const AboutSettingsSection(),