mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-03-12 13:20:42 +00:00
IAPBuilder
-> IAPListTile
This commit is contained in:
parent
3e8e9d9426
commit
483453f69a
5 changed files with 68 additions and 73 deletions
|
@ -1,8 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:lightmeter/generated/l10n.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/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:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart';
|
||||||
import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart';
|
|
||||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||||
|
|
||||||
class EquipmentProfilesListTile extends StatelessWidget {
|
class EquipmentProfilesListTile extends StatelessWidget {
|
||||||
|
@ -10,18 +9,14 @@ class EquipmentProfilesListTile extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IAPBuilder(
|
return IAPListTile(
|
||||||
builder: (context, status) => ListTile(
|
|
||||||
leading: const Icon(Icons.camera),
|
leading: const Icon(Icons.camera),
|
||||||
title: Text(S.of(context).equipmentProfiles),
|
title: Text(S.of(context).equipmentProfiles),
|
||||||
onTap: status == IAPProductStatus.purchased
|
onTap: () {
|
||||||
? () {
|
|
||||||
Navigator.of(context).push<EquipmentProfile>(
|
Navigator.of(context).push<EquipmentProfile>(
|
||||||
MaterialPageRoute(builder: (_) => const EquipmentProfilesScreen()),
|
MaterialPageRoute(builder: (_) => const EquipmentProfilesScreen()),
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
: null,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,20 +2,17 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:lightmeter/data/models/film.dart';
|
import 'package:lightmeter/data/models/film.dart';
|
||||||
import 'package:lightmeter/generated/l10n.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/dialog_filter/widget_dialog_filter.dart';
|
||||||
import 'package:lightmeter/screens/settings/components/shared/iap_builder/widget_builder_iap.dart';
|
import 'package:lightmeter/screens/settings/components/shared/iap_list_tile/widget_list_tile_iap.dart';
|
||||||
import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart';
|
|
||||||
|
|
||||||
class FilmsListTile extends StatelessWidget {
|
class FilmsListTile extends StatelessWidget {
|
||||||
const FilmsListTile({super.key});
|
const FilmsListTile({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IAPBuilder(
|
return IAPListTile(
|
||||||
builder: (context, status) => ListTile(
|
|
||||||
leading: const Icon(Icons.camera_roll),
|
leading: const Icon(Icons.camera_roll),
|
||||||
title: Text(S.of(context).filmsInUse),
|
title: Text(S.of(context).filmsInUse),
|
||||||
onTap: status == IAPProductStatus.purchased
|
onTap: () {
|
||||||
? () {
|
|
||||||
showDialog<List<Film>>(
|
showDialog<List<Film>>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (_) => DialogFilter<Film>(
|
builder: (_) => DialogFilter<Film>(
|
||||||
|
@ -29,9 +26,7 @@ class FilmsListTile extends StatelessWidget {
|
||||||
).then((values) {
|
).then((values) {
|
||||||
if (values != null) {}
|
if (values != null) {}
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
: null,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,20 @@
|
||||||
import 'package:flutter/material.dart';
|
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/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/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:lightmeter/screens/settings/components/shared/settings_section/widget_settings_section.dart';
|
||||||
import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart';
|
|
||||||
|
|
||||||
class EquipmentSettingsSection extends StatelessWidget {
|
class EquipmentSettingsSection extends StatelessWidget {
|
||||||
const EquipmentSettingsSection({super.key});
|
const EquipmentSettingsSection({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IAPBuilder(
|
|
||||||
builder: (context, status) {
|
|
||||||
return SettingsSection(
|
return SettingsSection(
|
||||||
title: "Equipment",
|
title: S.of(context).equipment,
|
||||||
children: const [
|
children: const [
|
||||||
EquipmentProfilesListTile(),
|
EquipmentProfilesListTile(),
|
||||||
FilmsListTile(),
|
FilmsListTile(),
|
||||||
],
|
],
|
||||||
enabled: status == IAPProductStatus.purchased,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue