support_section_widget.dart 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:photos/core/configuration.dart';
  4. import 'package:photos/core/constants.dart';
  5. import "package:photos/generated/l10n.dart";
  6. import 'package:photos/theme/ente_theme.dart';
  7. import 'package:photos/ui/common/web_page.dart';
  8. import 'package:photos/ui/components/captioned_text_widget.dart';
  9. import 'package:photos/ui/components/expandable_menu_item_widget.dart';
  10. import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart';
  11. import 'package:photos/ui/settings/about_section_widget.dart';
  12. import 'package:photos/ui/settings/common_settings.dart';
  13. import 'package:photos/utils/email_util.dart';
  14. class SupportSectionWidget extends StatelessWidget {
  15. const SupportSectionWidget({Key? key}) : super(key: key);
  16. @override
  17. Widget build(BuildContext context) {
  18. return ExpandableMenuItemWidget(
  19. title: S.of(context).support,
  20. selectionOptionsWidget: _getSectionOptions(context),
  21. leadingIcon: Icons.help_outline_outlined,
  22. );
  23. }
  24. Widget _getSectionOptions(BuildContext context) {
  25. final String bugsEmail =
  26. Platform.isAndroid ? "android-bugs@ente.io" : "ios-bugs@ente.io";
  27. return Column(
  28. children: [
  29. sectionOptionSpacing,
  30. MenuItemWidget(
  31. captionedTextWidget: CaptionedTextWidget(
  32. title: S.of(context).contactSupport,
  33. ),
  34. pressedColor: getEnteColorScheme(context).fillFaint,
  35. trailingIcon: Icons.chevron_right_outlined,
  36. trailingIconIsMuted: true,
  37. onTap: () async {
  38. await sendEmail(context, to: supportEmail);
  39. },
  40. ),
  41. sectionOptionSpacing,
  42. AboutMenuItemWidget(
  43. title: S.of(context).faq,
  44. url: "https://ente.io/faq",
  45. ),
  46. sectionOptionSpacing,
  47. MenuItemWidget(
  48. captionedTextWidget: CaptionedTextWidget(
  49. title: S.of(context).suggestFeatures,
  50. ),
  51. pressedColor: getEnteColorScheme(context).fillFaint,
  52. trailingIcon: Icons.chevron_right_outlined,
  53. trailingIconIsMuted: true,
  54. onTap: () async {
  55. Navigator.of(context).push(
  56. MaterialPageRoute(
  57. builder: (BuildContext context) {
  58. final endpoint = Configuration.instance.getHttpEndpoint() +
  59. "/users/roadmap";
  60. final url = Configuration.instance.isLoggedIn()
  61. ? endpoint +
  62. "?token=" +
  63. Configuration.instance.getToken()!
  64. : roadmapURL;
  65. return WebPage(S.of(context).suggestFeatures, url);
  66. },
  67. ),
  68. );
  69. },
  70. ),
  71. sectionOptionSpacing,
  72. MenuItemWidget(
  73. captionedTextWidget: CaptionedTextWidget(
  74. title: S.of(context).reportABug,
  75. ),
  76. pressedColor: getEnteColorScheme(context).fillFaint,
  77. trailingIcon: Icons.chevron_right_outlined,
  78. trailingIconIsMuted: true,
  79. onTap: () async {
  80. await sendLogs(context, S.of(context).reportBug, bugsEmail);
  81. },
  82. onDoubleTap: () async {
  83. final zipFilePath = await getZippedLogsFile(context);
  84. await shareLogs(context, bugsEmail, zipFilePath);
  85. },
  86. ),
  87. sectionOptionSpacing,
  88. ],
  89. );
  90. }
  91. }