support_section_widget.dart 3.3 KB

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