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 index 09c2bf7..0cb5631 100644 --- 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 @@ -1,8 +1,7 @@ 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:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; class EquipmentProfilesListTile extends StatelessWidget { @@ -10,18 +9,14 @@ class EquipmentProfilesListTile extends StatelessWidget { @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, - ), + return IAPListTile( + leading: const Icon(Icons.camera), + title: Text(S.of(context).equipmentProfiles), + onTap: () { + Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const EquipmentProfilesScreen()), + ); + }, ); } } 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 index 479da6a..7667416 100644 --- 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 @@ -2,36 +2,31 @@ 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'; +import 'package:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_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(S.of(context).filmsInUse), - onTap: status == IAPProductStatus.purchased - ? () { - showDialog>( - context: context, - builder: (_) => DialogFilter( - icon: const Icon(Icons.camera_roll), - title: S.of(context).filmsInUse, - description: S.of(context).filmsInUseDescription, - values: Film.values.sublist(1), - selectedValues: Film.values.sublist(1), - titleAdapter: (_, value) => value.name, - ), - ).then((values) { - if (values != null) {} - }); - } - : null, - ), + return IAPListTile( + leading: const Icon(Icons.camera_roll), + title: Text(S.of(context).filmsInUse), + onTap: () { + showDialog>( + context: context, + builder: (_) => DialogFilter( + icon: const Icon(Icons.camera_roll), + title: S.of(context).filmsInUse, + description: S.of(context).filmsInUseDescription, + values: Film.values.sublist(1), + selectedValues: Film.values.sublist(1), + titleAdapter: (_, value) => value.name, + ), + ).then((values) { + if (values != 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 index a44ed81..ba3b975 100644 --- a/lib/screens/settings/components/equipment/widget_settings_section_equipment.dart +++ b/lib/screens/settings/components/equipment/widget_settings_section_equipment.dart @@ -1,26 +1,20 @@ import 'package:flutter/material.dart'; +import 'package:lightmeter/generated/l10n.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, - ); - }, + return SettingsSection( + title: S.of(context).equipment, + children: const [ + EquipmentProfilesListTile(), + FilmsListTile(), + ], ); } } 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 deleted file mode 100644 index ecb3b38..0000000 --- a/lib/screens/settings/components/shared/iap_builder/widget_builder_iap.dart +++ /dev/null @@ -1,22 +0,0 @@ -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/iap_list_tile/widget_list_tile_iap.dart b/lib/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart new file mode 100644 index 0000000..8c79f37 --- /dev/null +++ b/lib/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart'; + +/// Depends on the product status and replaces [onTap] with purchase callback +/// if the product is purchasable. +class IAPListTile extends StatelessWidget { + final IAPProductType product; + final Icon leading; + final Text title; + final VoidCallback onTap; + + const IAPListTile({ + this.product = IAPProductType.paidFeatures, + required this.leading, + required this.title, + required this.onTap, + super.key, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + leading: leading, + title: title, + onTap: switch (IAPProducts.productOf(context, product)?.status) { + IAPProductStatus.purchasable => () => IAPProductsProvider.of(context).buy(product), + IAPProductStatus.pending => null, + IAPProductStatus.purchased => onTap, + null => null, + }, + ); + } +}