general_section_widget.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import 'package:flutter/material.dart';
  2. import 'package:photos/services/billing_service.dart';
  3. import 'package:photos/services/user_service.dart';
  4. import 'package:photos/theme/ente_theme.dart';
  5. import 'package:photos/ui/advanced_settings_screen.dart';
  6. import 'package:photos/ui/components/captioned_text_widget.dart';
  7. import 'package:photos/ui/components/expandable_menu_item_widget.dart';
  8. import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart';
  9. import "package:photos/ui/growth/referral_screen.dart";
  10. import 'package:photos/ui/payment/subscription.dart';
  11. import 'package:photos/ui/settings/common_settings.dart';
  12. import 'package:photos/utils/navigation_util.dart';
  13. class GeneralSectionWidget extends StatelessWidget {
  14. const GeneralSectionWidget({Key? key}) : super(key: key);
  15. @override
  16. Widget build(BuildContext context) {
  17. return ExpandableMenuItemWidget(
  18. title: "General",
  19. selectionOptionsWidget: _getSectionOptions(context),
  20. leadingIcon: Icons.graphic_eq,
  21. );
  22. }
  23. Widget _getSectionOptions(BuildContext context) {
  24. return Column(
  25. children: [
  26. sectionOptionSpacing,
  27. MenuItemWidget(
  28. captionedTextWidget: const CaptionedTextWidget(
  29. title: "Manage subscription",
  30. ),
  31. pressedColor: getEnteColorScheme(context).fillFaint,
  32. trailingIcon: Icons.chevron_right_outlined,
  33. trailingIconIsMuted: true,
  34. onTap: () async {
  35. _onManageSubscriptionTapped(context);
  36. },
  37. ),
  38. sectionOptionSpacing,
  39. MenuItemWidget(
  40. captionedTextWidget: const CaptionedTextWidget(
  41. title: "Family plans",
  42. ),
  43. pressedColor: getEnteColorScheme(context).fillFaint,
  44. trailingIcon: Icons.chevron_right_outlined,
  45. trailingIconIsMuted: true,
  46. showOnlyLoadingState: true,
  47. onTap: () async {
  48. await _onFamilyPlansTapped(context);
  49. },
  50. ),
  51. sectionOptionSpacing,
  52. MenuItemWidget(
  53. captionedTextWidget: const CaptionedTextWidget(
  54. title: "Referrals",
  55. ),
  56. pressedColor: getEnteColorScheme(context).fillFaint,
  57. trailingIcon: Icons.chevron_right_outlined,
  58. trailingIconIsMuted: true,
  59. onTap: () async {
  60. routeToPage(
  61. context,
  62. const ReferralScreen(),
  63. forceCustomPageRoute: true,
  64. );
  65. },
  66. ),
  67. sectionOptionSpacing,
  68. MenuItemWidget(
  69. captionedTextWidget: const CaptionedTextWidget(
  70. title: "Advanced",
  71. ),
  72. pressedColor: getEnteColorScheme(context).fillFaint,
  73. trailingIcon: Icons.chevron_right_outlined,
  74. trailingIconIsMuted: true,
  75. onTap: () async {
  76. _onAdvancedTapped(context);
  77. },
  78. ),
  79. sectionOptionSpacing,
  80. ],
  81. );
  82. }
  83. void _onManageSubscriptionTapped(BuildContext context) {
  84. Navigator.of(context).push(
  85. MaterialPageRoute(
  86. builder: (BuildContext context) {
  87. return getSubscriptionPage();
  88. },
  89. ),
  90. );
  91. }
  92. Future<void> _onFamilyPlansTapped(BuildContext context) async {
  93. final userDetails =
  94. await UserService.instance.getUserDetailsV2(memoryCount: false);
  95. BillingService.instance.launchFamilyPortal(context, userDetails);
  96. }
  97. void _onAdvancedTapped(BuildContext context) {
  98. routeToPage(
  99. context,
  100. const AdvancedSettingsScreen(),
  101. );
  102. }
  103. }