support_section_widget.dart 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import 'dart:io';
  2. import 'package:expandable/expandable.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:logging/logging.dart';
  5. import 'package:photos/core/configuration.dart';
  6. import 'package:photos/core/constants.dart';
  7. import 'package:photos/ui/common/web_page.dart';
  8. import 'package:photos/ui/settings/common_settings.dart';
  9. import 'package:photos/ui/settings/settings_section_title.dart';
  10. import 'package:photos/ui/settings/settings_text_item.dart';
  11. import 'package:photos/utils/dialog_util.dart';
  12. import 'package:photos/utils/email_util.dart';
  13. import 'package:url_launcher/url_launcher.dart';
  14. class SupportSectionWidget extends StatelessWidget {
  15. const SupportSectionWidget({Key key}) : super(key: key);
  16. @override
  17. Widget build(BuildContext context) {
  18. return ExpandablePanel(
  19. header: SettingsSectionTitle("Support"),
  20. collapsed: Container(),
  21. expanded: _getSectionOptions(context),
  22. theme: getExpandableTheme(context),
  23. );
  24. }
  25. Widget _getSectionOptions(BuildContext context) {
  26. final String bugsEmail =
  27. Platform.isAndroid ? "android-bugs@ente.io" : "ios-bugs@ente.io";
  28. return Column(
  29. children: [
  30. GestureDetector(
  31. behavior: HitTestBehavior.translucent,
  32. onTap: () async {
  33. try {
  34. final Uri emailLaunchUri = Uri(
  35. scheme: 'mailto',
  36. path: kSupportEmail,
  37. );
  38. launchUrl(emailLaunchUri);
  39. } catch (e) {
  40. Logger("SupportSection").severe(e);
  41. showErrorDialog(context, "", "Please email us at $kSupportEmail");
  42. }
  43. },
  44. child: SettingsTextItem(text: "Email", icon: Icons.navigate_next),
  45. ),
  46. sectionOptionDivider,
  47. GestureDetector(
  48. behavior: HitTestBehavior.translucent,
  49. onTap: () {
  50. Navigator.of(context).push(
  51. MaterialPageRoute(
  52. builder: (BuildContext context) {
  53. final endpoint = Configuration.instance.getHttpEndpoint() +
  54. "/users/roadmap";
  55. final isLoggedIn = Configuration.instance.getToken() != null;
  56. final url = isLoggedIn
  57. ? endpoint + "?token=" + Configuration.instance.getToken()
  58. : kRoadmapURL;
  59. return WebPage("Roadmap", url);
  60. },
  61. ),
  62. );
  63. },
  64. child: SettingsTextItem(text: "Roadmap", icon: Icons.navigate_next),
  65. ),
  66. sectionOptionDivider,
  67. GestureDetector(
  68. behavior: HitTestBehavior.translucent,
  69. onTap: () async {
  70. await sendLogs(context, "Report bug", bugsEmail);
  71. },
  72. onDoubleTap: () async {
  73. final zipFilePath = await getZippedLogsFile(context);
  74. await shareLogs(context, bugsEmail, zipFilePath);
  75. },
  76. child: SettingsTextItem(
  77. text: "Report bug 🐞",
  78. icon: Icons.navigate_next,
  79. ),
  80. ),
  81. ],
  82. );
  83. }
  84. }