general_section_widget.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. );
  64. },
  65. ),
  66. sectionOptionSpacing,
  67. MenuItemWidget(
  68. captionedTextWidget: const CaptionedTextWidget(
  69. title: "Advanced",
  70. ),
  71. pressedColor: getEnteColorScheme(context).fillFaint,
  72. trailingIcon: Icons.chevron_right_outlined,
  73. trailingIconIsMuted: true,
  74. onTap: () async {
  75. _onAdvancedTapped(context);
  76. },
  77. ),
  78. sectionOptionSpacing,
  79. ],
  80. );
  81. }
  82. void _onManageSubscriptionTapped(BuildContext context) {
  83. Navigator.of(context).push(
  84. MaterialPageRoute(
  85. builder: (BuildContext context) {
  86. return getSubscriptionPage();
  87. },
  88. ),
  89. );
  90. }
  91. Future<void> _onFamilyPlansTapped(BuildContext context) async {
  92. final userDetails =
  93. await UserService.instance.getUserDetailsV2(memoryCount: false);
  94. BillingService.instance.launchFamilyPortal(context, userDetails);
  95. }
  96. void _onAdvancedTapped(BuildContext context) {
  97. routeToPage(
  98. context,
  99. const AdvancedSettingsScreen(),
  100. );
  101. }
  102. }