From 82669bc5e5bf5efbbb9508c1003a20aa12e3531f Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Mon, 11 Aug 2025 12:31:38 +0200 Subject: [PATCH] allow more free actions --- .../screen_equipment_profiles.dart | 12 ++++-- .../logbook_photos/screen_logbook_photos.dart | 13 ++++++- .../widget_bottom_controls.dart | 3 +- .../logbook/widget_list_tile_logbook.dart | 3 +- .../timer/widget_list_tile_timer.dart | 16 ++++++-- .../widget_list_tile_equipment_profiles.dart | 3 +- .../films/widget_list_tile_films.dart | 13 +++++-- .../widget_list_tile_show_ev_100.dart | 5 ++- .../iap_list_tile/widget_list_tile_iap.dart | 29 --------------- .../widget_iap_switch_list_tile.dart | 37 ------------------- 10 files changed, 48 insertions(+), 86 deletions(-) delete mode 100644 lib/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart delete mode 100644 lib/screens/settings/components/shared/iap_switch_list_tile/widget_iap_switch_list_tile.dart diff --git a/lib/screens/equipment_profiles/screen_equipment_profiles.dart b/lib/screens/equipment_profiles/screen_equipment_profiles.dart index af57d45..4fb1afa 100644 --- a/lib/screens/equipment_profiles/screen_equipment_profiles.dart +++ b/lib/screens/equipment_profiles/screen_equipment_profiles.dart @@ -6,6 +6,7 @@ import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/screens/equipment_profile_edit/flow_equipment_profile_edit.dart'; import 'package:lightmeter/screens/shared/sliver_placeholder/widget_sliver_placeholder.dart'; import 'package:lightmeter/screens/shared/sliver_screen/screen_sliver.dart'; +import 'package:lightmeter/utils/guard_pro_tap.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; class EquipmentProfilesScreen extends StatefulWidget { @@ -41,9 +42,14 @@ class _EquipmentProfilesScreenState extends State with } void _addProfile() { - Navigator.of(context).pushNamed( - NavigationRoutes.equipmentProfileEditScreen.name, - arguments: const EquipmentProfileEditArgs(editType: EquipmentProfileEditType.add), + guardProTap( + context, + () { + Navigator.of(context).pushNamed( + NavigationRoutes.equipmentProfileEditScreen.name, + arguments: const EquipmentProfileEditArgs(editType: EquipmentProfileEditType.add), + ); + }, ); } diff --git a/lib/screens/logbook_photos/screen_logbook_photos.dart b/lib/screens/logbook_photos/screen_logbook_photos.dart index f351e23..22be0f5 100644 --- a/lib/screens/logbook_photos/screen_logbook_photos.dart +++ b/lib/screens/logbook_photos/screen_logbook_photos.dart @@ -7,6 +7,8 @@ import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/screens/logbook_photos/components/grid_tile/widget_grid_tile_logbook_photo.dart'; import 'package:lightmeter/screens/shared/icon_placeholder/widget_icon_placeholder.dart'; import 'package:lightmeter/screens/shared/sliver_screen/screen_sliver.dart'; +import 'package:lightmeter/utils/context_utils.dart'; +import 'package:lightmeter/utils/guard_pro_tap.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; class LogbookPhotosScreen extends StatefulWidget { @@ -30,8 +32,15 @@ class _LogbookPhotosScreenState extends State with SingleTi child: SwitchListTile( secondary: const Icon(Icons.book_outlined), title: Text(S.of(context).saveNewPhotos), - value: LogbookPhotos.isEnabledOf(context), - onChanged: LogbookPhotosProvider.of(context).saveLogbookPhotos, + value: LogbookPhotos.isEnabledOf(context) && context.isPro, + onChanged: (value) { + guardProTap( + context, + () { + Navigator.of(context).pushNamed(NavigationRoutes.proFeaturesScreen.name); + }, + ); + }, ), ), ), diff --git a/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart b/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart index 2584783..fcc7556 100644 --- a/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart +++ b/lib/screens/metering/components/bottom_controls/widget_bottom_controls.dart @@ -4,7 +4,6 @@ import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/providers/user_preferences_provider.dart'; import 'package:lightmeter/screens/shared/animated_circular_button/widget_button_circular_animated.dart'; import 'package:lightmeter/screens/shared/bottom_controls_bar/widget_bottom_controls_bar.dart'; -import 'package:lightmeter/utils/context_utils.dart'; class MeteringBottomControls extends StatelessWidget { final double? ev; @@ -76,7 +75,7 @@ class _EvValueText extends StatelessWidget { } String _text(BuildContext context) { - final bool showEv100 = context.isPro && UserPreferencesProvider.showEv100Of(context); + final bool showEv100 = UserPreferencesProvider.showEv100Of(context); final StringBuffer buffer = StringBuffer() ..writeAll([ (showEv100 ? ev100 : ev).toStringAsFixed(1), diff --git a/lib/screens/settings/components/camera/logbook/widget_list_tile_logbook.dart b/lib/screens/settings/components/camera/logbook/widget_list_tile_logbook.dart index 1beb4bc..d853f93 100644 --- a/lib/screens/settings/components/camera/logbook/widget_list_tile_logbook.dart +++ b/lib/screens/settings/components/camera/logbook/widget_list_tile_logbook.dart @@ -1,14 +1,13 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/navigation/routes.dart'; -import 'package:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart'; class LogbookListTile extends StatelessWidget { const LogbookListTile({super.key}); @override Widget build(BuildContext context) { - return IAPListTile( + return ListTile( leading: const Icon(Icons.book_outlined), title: Text(S.of(context).logbook), onTap: () { diff --git a/lib/screens/settings/components/general/components/timer/widget_list_tile_timer.dart b/lib/screens/settings/components/general/components/timer/widget_list_tile_timer.dart index a08cc64..05bf5d6 100644 --- a/lib/screens/settings/components/general/components/timer/widget_list_tile_timer.dart +++ b/lib/screens/settings/components/general/components/timer/widget_list_tile_timer.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:lightmeter/generated/l10n.dart'; +import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/screens/settings/components/general/components/timer/bloc_list_tile_timer.dart'; -import 'package:lightmeter/screens/settings/components/shared/iap_switch_list_tile/widget_iap_switch_list_tile.dart'; +import 'package:lightmeter/utils/context_utils.dart'; +import 'package:lightmeter/utils/guard_pro_tap.dart'; class TimerListTile extends StatelessWidget { const TimerListTile({super.key}); @@ -10,11 +12,17 @@ class TimerListTile extends StatelessWidget { @override Widget build(BuildContext context) { return BlocBuilder( - builder: (context, state) => IAPSwitchListTile( + builder: (context, state) => SwitchListTile( secondary: const Icon(Icons.timer_outlined), title: Text(S.of(context).autostartTimer), - value: state, - onChanged: context.read().onChanged, + value: context.isPro && state, + contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), + onChanged: (value) { + guardProTap( + context, + () => context.read().onChanged(value), + ); + }, ), ); } 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 index 1c8c6db..2864cb2 100644 --- 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 @@ -1,14 +1,13 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/navigation/routes.dart'; -import 'package:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart'; class EquipmentProfilesListTile extends StatelessWidget { const EquipmentProfilesListTile({super.key}); @override Widget build(BuildContext context) { - return IAPListTile( + return ListTile( leading: const Icon(Icons.camera_outlined), title: Text(S.of(context).equipmentProfiles), onTap: () { diff --git a/lib/screens/settings/components/metering/components/films/widget_list_tile_films.dart b/lib/screens/settings/components/metering/components/films/widget_list_tile_films.dart index 0cc1733..b6f5684 100644 --- a/lib/screens/settings/components/metering/components/films/widget_list_tile_films.dart +++ b/lib/screens/settings/components/metering/components/films/widget_list_tile_films.dart @@ -1,17 +1,24 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/navigation/routes.dart'; -import 'package:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart'; +import 'package:lightmeter/utils/guard_pro_tap.dart'; class FilmsListTile extends StatelessWidget { const FilmsListTile({super.key}); @override Widget build(BuildContext context) { - return IAPListTile( + return ListTile( leading: const Icon(Icons.camera_roll_outlined), title: Text(S.of(context).films), - onTap: () => Navigator.of(context).pushNamed(NavigationRoutes.filmsListScreen.name), + onTap: () { + guardProTap( + context, + () { + Navigator.of(context).pushNamed(NavigationRoutes.filmsListScreen.name); + }, + ); + }, ); } } diff --git a/lib/screens/settings/components/metering/components/show_ev_100/widget_list_tile_show_ev_100.dart b/lib/screens/settings/components/metering/components/show_ev_100/widget_list_tile_show_ev_100.dart index 9fd7985..27e46fd 100644 --- a/lib/screens/settings/components/metering/components/show_ev_100/widget_list_tile_show_ev_100.dart +++ b/lib/screens/settings/components/metering/components/show_ev_100/widget_list_tile_show_ev_100.dart @@ -1,17 +1,18 @@ import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/providers/user_preferences_provider.dart'; -import 'package:lightmeter/screens/settings/components/shared/iap_switch_list_tile/widget_iap_switch_list_tile.dart'; +import 'package:lightmeter/res/dimens.dart'; class ShowEv100ListTile extends StatelessWidget { const ShowEv100ListTile({super.key}); @override Widget build(BuildContext context) { - return IAPSwitchListTile( + return SwitchListTile( secondary: const Icon(Icons.adjust_outlined), title: Text(S.of(context).showEv100), value: UserPreferencesProvider.showEv100Of(context), + contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), onChanged: (_) => UserPreferencesProvider.of(context).toggleShowEv100(), ); } diff --git a/lib/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart b/lib/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart deleted file mode 100644 index 4b63a3e..0000000 --- a/lib/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lightmeter/navigation/routes.dart'; -import 'package:lightmeter/utils/context_utils.dart'; - -class IAPListTile extends StatelessWidget { - final Icon leading; - final Text title; - final VoidCallback onTap; - - const IAPListTile({ - required this.leading, - required this.title, - required this.onTap, - super.key, - }); - - @override - Widget build(BuildContext context) { - return ListTile( - leading: leading, - title: title, - onTap: context.isPro - ? onTap - : () { - Navigator.of(context).pushNamed(NavigationRoutes.proFeaturesScreen.name); - }, - ); - } -} diff --git a/lib/screens/settings/components/shared/iap_switch_list_tile/widget_iap_switch_list_tile.dart b/lib/screens/settings/components/shared/iap_switch_list_tile/widget_iap_switch_list_tile.dart deleted file mode 100644 index eeadbd1..0000000 --- a/lib/screens/settings/components/shared/iap_switch_list_tile/widget_iap_switch_list_tile.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lightmeter/navigation/routes.dart'; -import 'package:lightmeter/res/dimens.dart'; -import 'package:lightmeter/utils/context_utils.dart'; - -class IAPSwitchListTile extends StatelessWidget { - final Icon secondary; - final Text title; - final Text? subtitle; - final bool value; - final ValueChanged? onChanged; - - const IAPSwitchListTile({ - required this.secondary, - required this.title, - this.subtitle, - required this.value, - required this.onChanged, - super.key, - }); - - @override - Widget build(BuildContext context) { - return SwitchListTile( - secondary: secondary, - title: title, - subtitle: subtitle, - value: context.isPro && value, - contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), - onChanged: context.isPro - ? onChanged - : (_) { - Navigator.of(context).pushNamed(NavigationRoutes.proFeaturesScreen.name); - }, - ); - } -}